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
Вот так то.
Подскажите более подробно, куда добавлять правило для сборки?
правило сборки добавлять в файл miscutils/Kbuild.src
А где можно скачать уже готовые апплеты?