背景
在做嵌入式開的時候,busybox無疑是非常好用的命令集,所以很多時候都喜歡把busybox移植到我們的系統里面。
說明
添加一個很簡單的命令——hello_busybox,輸出“Hello Husybox!”。
busybox解壓出來有很多目錄,每個目錄幾乎是一類命令,比如網絡,shell等等。
為了方便舉例,我們把hello_busybox這個命令添加到miscutils目錄下。
步驟
1)、在miscutils目錄下添加.c文件,函數名要與其它.c文件里面的函數名的格式保持一致,即命令名_main()。
vi miscutils/hello_busybox.c
使用以下內容
//#include "busybox.h"
#include "libbb.h"
int hello_busybox_main(int argc, char *argv[])
{
printf("hello_busybox_main!\n");
return 0;
}
2)、修改源文件所在目錄下的配置
vi miscutils/Config.src
新增以下內容
config HELLO_BUSYBOX
bool "say hello to busybox"
default y
select PLATFORM_LINUX
help
say hello to busybox
修改這里主要是使得執行“make menuconfig”命令的時候,配置界面可以出現我們新增的命令,讓用戶對該命令可以配置。
第一行是表示該命令的一個環境變量;第二行是出現在配置界面上的文字,是一個布爾量,取值為“Y”或者“N”;第三行是這個選項的默認值,這里默認是選中,后面兩行是在配置界面的幫助信息。
注:修改上面的文件只是讓配置界面出現我們的這個命令,以及根據是否選擇配置環境變量“HELLO_BUSYBOX”為“Y"或”N",到目前為止,busybox還是不能編譯到我們的源文件,甚至到現在為止都還不知道我們的這個源文件叫啥。
3)、修改編譯源文件所在目錄的Kbuild.src
vi miscutils/Kbuild.src
在INSERT之后新增一行
lib-$(CONFIG_HELLO_BUSYBOX) += hello_busybox.o
4)、修改include/applets.src.h文件
vi include/applets.src.h
新增一行
IF_HELLO_BUSYBOX(APPLET(hello_busybox, BB_DIR_SBIN, BB_SUID_DROP))
#第一個參數:命令的名字;第二個參數:存放的路徑:第三個參數:權限
5)、為命令添加幫助信息,以便使用--help的時候查閱
vi include/usage.src.h
新增下面內容
#define hello_busybox_trivial_usage \
"None"
#define hello_busybox_full_usage "None"
// 多行注意需要用"\" 隔開
使用make menuconfig
即可看到,還有在make
之前可以查看到include/autoconf.h里面有:
#define CONFIG_HELLO_BUSYBOX 1
#define ENABLE_HELLO_BUSYBOX 1
make 之后在include/config/下生成/hello/busybox.h文件:
#define CONFIG_HELLO_BUSYBOX 1
測試
本機也可以進行測試(編譯成本機能夠執行的語言即可)
./busybox | grep hello_busybox
或者
ln -s busybox hello_busybox && ./hello_busybox
注:此文並沒有完成在自定義目錄下添加小程序