BusyBox移植与新增命令
初识 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、配置静态可执行文件(可选)

![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mkDZHOAL-1594374618748)(http://sswiki.sigmastar.com.tw:8090/download/attachments/1223688/image2020-7-10_9-33-11.png?version=1&modificationDate=1594344814413&api=v2)]](https://img-blog.csdnimg.cn/20200710175251720.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NlbnNvcl9teQ==,size_16,color_FFFFFF,t_70)
进入Build Options,空格配置Build static 目的是把 BusyBox编译为静态链接的可执行文件
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l3r1wyZY-1594374618749)(http://sswiki.sigmastar.com.tw:8090/download/attachments/1223688/image2020-7-10_9-34-21.png?version=1&modificationDate=1594344884449&api=v2)]](https://img-blog.csdnimg.cn/20200710175306346.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NlbnNvcl9teQ==,size_16,color_FFFFFF,t_70)
保存退出
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、添加编译链接
按字母顺序保持原来的格式,添加链接
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vs4EU43e-1594374618749)(http://sswiki.sigmastar.com.tw:8090/download/attachments/1223688/image2020-7-10_10-38-41.png?version=1&modificationDate=1594348744230&api=v2)]](https://img-blog.csdnimg.cn/20200710175331425.png)
添加成功后保存退出,现在编译器已经知道我们文件在哪了
2.3、添加可视化界面选择
BusyBox 可裁剪,而且支持像 Linux 内核那样的图形化配置界面,我们只需如下图配置相关文件,在源代码./Documentation/kbuild/Kconfig-language.txt中可以看到配置的完整语法
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XPvupL0H-1594374618750)(http://sswiki.sigmastar.com.tw:8090/download/attachments/1223688/image2020-7-10_10-42-53.png?version=1&modificationDate=1594348995769&api=v2)]](https://img-blog.csdnimg.cn/20200710175343834.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NlbnNvcl9teQ==,size_16,color_FFFFFF,t_70)
2.4、创建命令名链接
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3bZ6LuIm-1594374618751)(http://sswiki.sigmastar.com.tw:8090/download/attachments/1223688/image2020-7-10_10-47-25.png?version=1&modificationDate=1594349267834&api=v2)]](https://img-blog.csdnimg.cn/20200710175354611.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vBJJtqNT-1594374618751)(http://sswiki.sigmastar.com.tw:8090/download/attachments/1223688/image2020-7-10_16-6-22.png?version=1&modificationDate=1594368405587&api=v2)]](https://img-blog.csdnimg.cn/20200710175402559.png)
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文件夹
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
