Добавляем свое приложение в busybox

Busybox — программа которая существенно облегчает жизнь встраиваемым системам. Это набор стандартных утилит, который написан с упором на компактность.
Проект приобрел довольно широкую распространенность на встраиваемых ПК именно из-за своего размера. Сделано это хитро. Бинарник один. А с помошью argv[] программа решает какой утилитой ей сейчас прикинуться. В каталоге bin же создаются ссылки на один единственный бинарный файл.

Давайте рассмотрим как добавить свою утилиту в этот набор.
Сперва скачаем репозиторий и попробуем собрать как есть.

git clone git://busybox.net/busybox.git
cd busybox
make menuconfig
make
./busybox sh

Отлично заработало. Все программы в busybox зовутся апплетами.
Рассмотрим апплет который выводит свое имя и параметры.

#include "libbb.h"

int hellocmd_main( int argc, char *argv[] )
{
    int i;
    printf("hellocmd called:\n");
    for (i = 0 ; i < argc ; i++) {
        printf("arg[%d] = %s\n", i, argv[i]);
    }
    return 0;
}

Положем его код в файл miscutils/hellocmd.c. Вы можете создать свой файл в любом из подкаталогов busybox. Все апплеты разделены по категориям.
Отредактируем файл настройки miscutils/Config.src.

config HELLOCMD
    bool "hellocmd"
    default n
    help
      This is sample command.

Добавим правило для сборки.

lib-$(CONFIG_HELLOCMD)      += hellocmd.o

Если Вам доводилось добавлять код в ядро Linux, то думаю ничего нового Вы в этом не видите.
Осталось только добавить макрос в include/applets.src.h

IF_HELLOCMD(APPLET(hellocmd, BB_DIR_BIN, BB_SUID_DROP))

Все изменения разработчики просят выполнять в алфавитном порядке.
Для работы встроенной системы справки также укажем такие строки в include/usage.src.h

#define hellocmd_trivial_usage  "None"
#define hellocmd_full_usage "None"

Теперь конфигурируем и пересобираем.

make menuconfig
make

Пробуем запускать.

$ ./busybox hellocmd 1 2 3
hellocmd called:
arg[0] = hellocmd
arg[1] = 1
arg[2] = 2
arg[3] = 3

Вот так то.

 

Похожий код:

Фото аватара
Алексей Петров

Программист, разработчик с 5 летним опытом работы. Учусь на разработчика игр на Unity и разработчика VR&AR реальности (виртуальной реальности). Основные языки программирования: C#, C++.

Оцените автора
Бла, бла код
Добавить комментарий

  1. Олег

    Подскажите более подробно, куда добавлять правило для сборки?

    Ответить
    1. lamazavr

      правило сборки добавлять в файл miscutils/Kbuild.src

      Ответить
  2. Meat

    А где можно скачать уже готовые апплеты?

    Ответить