初识 BusyBox
一、BusyBox移植
BusyBox是一个集成了一百多个常用Linux命令和工具的应用程序。它不仅包含了一些简单的命令,如 cat
、echo
和ls
等,而且还包含了一些更大、更复杂的工具,例如 grep
、find
、mount
以及 telnet
等。简单地说,BusyBox就好像是个大工具箱,集成了许多Linux常用的工具和命令。
1.1、下载BusyBox源码
下载地址:https://busybox.net/downloads/
我们选择1.21.1版本,下载后解压在当前目录下
tar -jxvf busybox-1.32.0.tar.bz2
//-j表示解压bz2包 -x表示解压 -v表示详细过程 -f表示文件
1.2、添加交叉编译工具链
修改Makefile
文件
我们交叉编译工具链的原则:和目标平台使用的编译器保持一致
1.3、配置静态可执行文件(可选)
进入Build Options
,空格配置Build static
目的是把 BusyBox编译为静态链接的可执行文件
保存退出
1.4、编译及烧录
等同于新增 BusyBox 命令中的编译、烧录
二、新增 BusyBox 命令
2.1、创建源码
根据命令类型将源码存放在对应的文件夹中,BusyBox 目录结构如下表`
目录 | 说明 |
---|---|
applets | 主要实现applets框架 |
applets_sh | 脚本目录 |
archival | 压缩有关的的命令eg:gzip |
configs | 默认配置文件 |
console_tools | 控制台命令eg:setconsole |
coreutils | 常用核心命令egcat 、ls |
editors | 常用编辑命令eg:vim 、diff |
findutils | 常用查找命令eg:find 、grep |
init | init进程源文件 |
networking | 网络相关命令eg:telnetl 、arp |
shell | shell相关命令eg:echo 、msh |
util-linux | linux VFS常用命令eg:mkfs_ext2 |
/*
@file mine.c
@brief The owner instructions
@version V1.0.0
@date 2020/7/9
*/
#include "busybox.h"
int mine_main(int argc,char*argv[])
{
printf("This's Xavier.xie\n");
return 0;
}
BusyBox从busybox.c文件中的main函数开始执行,int main( int argc, char *argv[] )
,argc
为参数数量,argv[0]
为applet_name
-> 调用applets/applets.c
文件的return lbb_main(argv)
->在include/applets.h
中填充内容为xxx_main
函数
->自此跳转到 applet 中执行
因此新增的 applet 函数为int xxx_main(int argc,char*argv[])
格式
2.2、添加编译链接
按字母顺序保持原来的格式,添加链接
添加成功后保存退出,现在编译器已经知道我们文件在哪了
2.3、添加可视化界面选择
BusyBox 可裁剪,而且支持像 Linux 内核那样的图形化配置界面,我们只需如下图配置相关文件,在源代码./Documentation/kbuild/Kconfig-language.txt
中可以看到配置的完整语法
2.4、创建命令名链接
APPLET
宏有三个参数:第一个是命令的名字;第二个是命令存放的路径,第三个是命令的权限
自此BusyBox已经可以调用到对应的applet相关代码了
2.5、添加命令名帮助信息
每个命令都必须有帮助信息,否则编译会报错
2.6、编译
xavier.xie@:~/Busybox/busybox-1.32.0$ make
//make完没有错误后,执行下一步
xavier.xie@:~/Busybox/busybox-1.32.0$ make install
//在当前目录下生成了_install文件夹