BusyBox移植与新增命令

初识 BusyBox


一、BusyBox移植


BusyBox是一个集成了一百多个常用Linux命令和工具的应用程序。它不仅包含了一些简单的命令,如 catechols等,而且还包含了一些更大、更复杂的工具,例如 grepfindmount 以及 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文件

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)]

进入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)]

保存退出

1.4、编译及烧录


等同于新增 BusyBox 命令中的编译、烧录

二、新增 BusyBox 命令


2.1、创建源码


根据命令类型将源码存放在对应的文件夹中,BusyBox 目录结构如下表`

目录说明
applets主要实现applets框架
applets_sh脚本目录
archival压缩有关的的命令eg:gzip
configs默认配置文件
console_tools控制台命令eg:setconsole
coreutils常用核心命令egcatls
editors常用编辑命令eg:vimdiff
findutils常用查找命令eg:findgrep
initinit进程源文件
networking网络相关命令eg:telnetlarp
shellshell相关命令eg:echomsh
util-linuxlinux 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)]

添加成功后保存退出,现在编译器已经知道我们文件在哪了

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)]

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)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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)]

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文件夹
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值