背景
在做嵌入式开的时候, 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
注: 此文并没有完成在自定义目录下添加小程序
来源: http://www.bubuko.com/infodetail-3359604.html