增加Busybox小程序和函数库

原创 2014年01月07日 15:01:29


来自《ARM Linux开发-2G/3G无线传输(DTU)和路由器—笔记》www.warewin.com

 

自己的一些应用程序可以是busybox中新建的小程序。有几个优势,busybox的小程序涉及技术方方面面很多,可以作为参考;另外busybox也有函数库供直接使用。Warewin的路由设计很多应用程序都是busybox的小程序。如ICMP检测,DNS检测,DTU程序,看门狗程序。

 

总的来说建立一个busybox所需要的工作有:

编写自己的小程序;在busybox主目录下添加自己的小程序配置;在主目录下增加自己小程序编译路径;新建小程序目录,在目录下放小程序,编写配置文件,kbuild文件;在/busybox-1.12.1/include/applets.h,/busybox-1.12.1/include/applet_tables.h注册小程序;在/busybox-1.12.1/include/usage.h文件中加入该程序的帮助说明;最后编译完后在根文件系统目录下生成小程序指向busybox的连接。

 

增加函数库

有时候小程序很大,不只是主程序,还有很多函数库,这时需要增加函数库。函数库不是运行的程序,增加相对简单。在busybox目录下建放置库函数的目录,把库文件相关目录文件放在该目录下;busybox主目录下的makefile文件中建立编译路径和头文件路径选项。在库函数目录下编写kbuild文件包含要编译的源文件。

 

下面以com_sk小程序为例。com_sk小程序是个串口程序,busybox小程序为com_sk

 

com_skbusybox小程序的C代码com_sk.c如下:

....

....

int com_sk_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;

int com_sk_main(int argc UNUSED_PARAM, char **argv)

{

....

....

while (1)

{

..........

}

.........

.......

}

在代码中 com_sk_main(int argc UNUSED_PARAM, char **argv)  这个函数很重要,小程序就是从这里运行的。函数命名参数必须按照这个格式来。这个函数必须在相应的文件登记。

com_sk名称为busybox小程序名称,这个C文件命名为com_sk.c;com_sk_main是这个程序执行开始点。

 

 

 

如何将个人的应用程序加到busybox中,如以下步骤:

1到官方网站http://www.busybox.net/下载源文件:busybox-1.12.1

2解压缩该文件后,#cd busybox-1.12.1 进到根目录下。

3Busybox的应用程序按功能被分散在源码的各个目录下面,为区分源码与个人添加的程序在根目录下新建一个存放个人应用程序的目录,例如新建一个warewin目录:

#mkdir warewin 

4、根据Busybox的目录结构,在/warewin目录下新建Config.inKbuild两个文件,把个人所有应用程序.c源文件放进去。

1/warewin/Config.in文件中增加相应的图形配置,如以下红色字体所示:

menu "WareWin Proc" //WareWin Proc为个人项目总菜单名

................

config COMSK//COMSK为子菜单名

bool "com_sk"

default y

help

 The local com  socket.

config COMPPP

bool "com_ppp"

default y

help

 The local com  ppp.

................

endmen

2/warewin/kbuild文件中增加相应的编译选项,如以下红色字体所示:

lib-y:=

................

lib-$(CONFIG_COMSK)       += com_sk.o

lib-$(CONFIG_COMPPP)       += com_ppp.o

lib-$(CONFIG_SERVER_ALL)      += server_tools.o

可以有多个.o文件 继续+=下去就可以

................

 

5、在busybox相应位置注册小程序,并添加帮助。

(1)/busybox-1.12.1/include/applets.h中把所需编译的文件添加到表中,加入代码:

................

USE_COMSK(APPLET(com_sk,_BB_DIR_USR_BIN,_BB_SUID_NEVER))

................

(2)在/busybox-1.12.1/include/applet_tables.happlet_name[]中添加该程序名:

................

"com_sk" "\0"

................

(3)在applet_main[]()中添加该程序的主函数名:

................

com_sk_main,

................

(4)在/busybox-1.12.1/include/usage.h文件中加入该程序的帮助说明,如以下所示:

................

#define com_sk_trivial_usage "com_sk truvial help"

#define com_sk_full_usage "com_sk full usage"

................

6、将warewin目录下的所有C源文件编译,打开/busybox-1.12.1/makefile文件,在变量libs -y中添加一行:warewin/ \

7、将warewin目录下的程序菜单加到图形配置中,打开/busybox-1.12.1/config.in文件、在文件未添加以下代码:source warewin/Config.in

8、回到/busybox-1.12.1/目录下,重新配置菜单选项:#make menuconfig

如下图所示可以在主菜单上看到我们加进来的个人项目主菜单WareWin Proc。

 

2.11 busybox总菜单图

进入/warewin proc菜单下选中我们要编译的程序,如下图所示:

 

2.12 个人项目子菜单图

9、退出菜单,重新编译:#make,将新生成的buxybox可执行程序放到根文件系统的/bin目录下。

10、在根文件系统的/usr/sbin目录下新建一个链接链接com_sk,该链接指向/bin/busybox

busybox.c中包含了BusyBox的入口main函数,在对调用参数处理之用调用applet.c中的run_applet_by_name函数,该函数将根据应用程序的名字,找到相应的applet,将执行BB_applet->main指向的函数,然后直接退出。

11、把根文件系统重新下载到设备上,设备重新开机后进到终端运行我们添加的程序。

#cd /usr/sbin

#./com_sk

 

 

1.24.2版本busybox扩充命令及函数集讲解||扩充applet命令

BusyBox 是标准 Linux 工具的一个单个可执行实现。BusyBox包含了一些简单的工具,例如 cat 和 echo,还包含了一些更大、更复杂的工具,例如 grep、find、mount 以及...
  • LiuNian_SiYu
  • LiuNian_SiYu
  • 2016年11月07日 15:33
  • 989

busybox详解

转载: 根文件系统及Busybox简介 BusyBox详解1.根文件系统简介所谓制作根文件系统,就是创建各种目录,并且在目录里创建相应的文件。例如:在/bin目录下放置可执行程序,在/lib下放置...
  • guodongsoft
  • guodongsoft
  • 2016年09月14日 08:27
  • 2999

增加Busybox小程序和函数库

来自《ARM Linux开发-2G/3G无线传输(DTU)和路由器—笔记》www.warewin.com   自己的一些应用程序可以是busybox中新建的小程序。有几个优势,busybox的小程...
  • u013033022
  • u013033022
  • 2014年01月07日 15:01
  • 1337

busybox添加新命令

BusyBox 命令中支持的选项     BusyBox 中的命令并不支持所有可用选项,不过这些命令都包含了常用的选项。如果我们需要知道一个命令可以支持哪些选项,可以使用 --help 选项来调...
  • hushup
  • hushup
  • 2013年12月16日 11:34
  • 1031

基于busybox的Linux小系统制作 (initrd)

我们有时候有需要在busybox基础上,制作linux,可是却不知道具体怎么做,这里将对基于busybox的linux小系统制作做出详细的步骤说明。准备环境:1、一个Redhat完整系统的虚拟机,本次...
  • mao0514
  • mao0514
  • 2016年04月26日 10:54
  • 3397

BusyBox

作者:郭孝星 微博:郭孝星的新浪微博 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells Github:https://githu...
  • AllenWells
  • AllenWells
  • 2015年08月11日 16:28
  • 441

busybox详解

根文件系统及Busybox详解之一 根文件系统及Busybox简介 目录 1.根文件系统简介…2 2.Busybox简介…2 2.1Busybox简介…2 2.2Busybox目录...
  • linuxarmsummary
  • linuxarmsummary
  • 2013年10月11日 10:24
  • 24187

Linux文件系统启动过程及login的实现 (busybox)

1. busybox简介 busybox是一个集成了一百多个最常用linux命令和工具的软件,它将许多常用的LINUX命令和工具结合到了一个单独的可执行程序中。虽然与相应的GNU工具比较起来,b...
  • u011150719
  • u011150719
  • 2015年01月14日 19:02
  • 1827

基于busybox构建最小linux Docker镜像系统

基本概念 1. Dockerfile 中可以通过FROM scratch引用一个docker内置的空镜像 2. Docker 容器的内核都是共享宿主操作系统的内核,容器启动后docker会自动在容器内...
  • hknaruto
  • hknaruto
  • 2017年04月18日 17:30
  • 4173

busybox详解

BusyBox 是很多标准 Linux® 工具的一个单个可执行实现。BusyBox 包含了一些简单的工具,例如 cat 和 echo,还包含了一些更大、更复杂的工具,例如 grep、find、moun...
  • wangrunmin
  • wangrunmin
  • 2012年05月17日 14:22
  • 1562
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:增加Busybox小程序和函数库
举报原因:
原因补充:

(最多只允许输入30个字)