增加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

 

 

busybox详解

根文件系统及Busybox详解之一 根文件系统及Busybox简介 目录 1.根文件系统简介…2 2.Busybox简介…2 2.1Busybox简介…2 2.2Busybox目录...

d7100 远程控制拍照(无线,有线,手机,电脑,路由器)

d7100 接口 左侧有,MIC接口,USB接口,HDMI接口,耳机接口,GPS接口 wu-1a 是其相机通过USB接口连接的,wifi路由器 插上,开启后,启动wifi 有 ssid  再安装安...
  • wide288
  • wide288
  • 2014年07月29日 15:55
  • 4441

编译用于Android的busybox---步骤,问题和解决

编译用于Android的busybox 使用arm-eabi-gcc编译busybox,设置-I${NDK_USR}/include -L${NDK_USR}/lib,源文件中出现许多subsc...

如何编写一个线程安全的程序或者函数库?

何为线程安全?在多线程环境中编程,大家一直都强调线程安全,可以什么是线程安全呢? 依据《Java 并发编程实践》/《Java Concurrency in Practice》一书,一个线程安全的Cl...

一剑易求双璧难得: 寻求与Oracle加密程序等效的Javascrip函数库

用户期望将Oracle中的加密数据下载到PC,在保证加密的同时,可以从PC上进行简单的检索。 经过多方商议,最后选择将加密数据原样输出成Javascript可以读取的格式,比如JSON,然后用Ja...

《Linux程序设计》——使用curses函数库管理基于文本的屏幕

一、curses函数库  1、用curses函数库进行编译   1)、

Linux应用程序学习之制作静态函数库

Linux应用程序学习之静态函数库设计         Linux应用程序中需要的外部函数主要是由函数库和系统调用来提供,函数库和系统调用的区别在于函数库位于用户态,而系统调用是由linux内核来实现...

Linux学习记录--程序编译与函数库

程序编译与函数库 前面提到过对于机器来说只能识别0,1,我们如果让机器运行必须输入机器能够识别的语言,可是机器语言不利于人们使用可理解,因此科学家就开发出人类能看的懂的程序语言,然后再创造出“编译器”...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:增加Busybox小程序和函数库
举报原因:
原因补充:

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