注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

My Unix World

不要迷恋Unix,Unix只是计算世界很小的一部分!

 
 
 

日志

 
 

转载:BusyBox源码结构简介  

2010-01-16 17:10:54|  分类: develop-embedded |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

出处:http://home.q.yesky.com/space-720221-do-blog-id-62561.html



1、 介绍 BusyBox称作是嵌入式开发的瑞士军刀,实用,短小,稳定。

l  BusyBox利用Linux实用工具中代码大量重复的事实,将重复的代码重新整理,放到一个文件中,减少了多次包含。

l  BusyBox通过简化非必要的复杂功能,减少占用的空间。

l  BusyBox的完全可定制性,提供了非常灵活,宜于扩展的结构。

2BusyBox的基本用法 可以在原代码的docs中看到有两种用法:

·  直接使用BusyBox

busybox <functiion> [ arg... ] 例如:/bin/busybox ls,将执行ls的功能

·  建立指向BusyBox的链接

<function> [ arg... ] 例如:ln -s /bin/busybox ls ./ls 将同样执行 ls的命令

3
BusyBox源码分析 BusyBox源码算是一个比较庞大的工程,但是该工程整体上看可以分为三个部分来讲述:

(1) BusyBox架构

BusyBox架构部分为BusyBox的运行提供了基本支持。其主要代码在applet下面。 busybox.c中包含了BusyBox的入口main函数,在对调用参数处理之用调用applet.c中的run_applet_by_name函数,该函数将根据Applet的名字,找到相应的applet,将执行BB_applet->main指向的函数,然后直接退出。这里BB_applet->main所执行的函数就是通过命令要执行的命令。 run_applet_by_name中,所调用的find_applet_by_name中用bsearchapplets进行搜索,并返回applet.applets的定义是在include/applets.h中,是一个常量数组。

(2) BusyBox实用库

Busybox的可复用函数都被定义在 libbb下面的文件中,其它的 applet通过对这些实用函数的调用实现自己的目标。

(3) BusyBoxApplet扩展

BusyBox本身没有多大的实用价值,更为重要的是BusyBoxApplet为我们提供了实用功能。Busyboxapplets按功能被分散在源码的各个目录下面。BusyBox本身也是一个applet.它的定义就在busybox.c中,其入口点是busybox_main. 举例说明:cp命令的实现,cp被放在 coreutils下面的cp.c,可以看到该文件中只有一个函数,cp_main(),该函数就是 cp命令的入口地址,而copy的最关键性的步骤:DO_COPY的实现,则是通过调用copy_file()来实现的。 copy_file这个函数被多个命令使用到,比如mv.cp等,它被放在libbbcopyfile.c.

4BusyBox源中的一些脚本分析

(1) applets /busybox.mkll, 该脚本通过分析include/config.h inlcude/applets.h两个文件来得到被配置的文件的链接。
(2) applets/install.sh,
该脚本根据busybox.mkll生成的busybox.link来建立链接文件
(3)
源码目录下的Makefile,提供了make menuconfig对源码进行配置,生成.config文件,make将生成busybox.

5、扩展BusyBox的功能

请参考docs/new_applet-HOWTO.txt文档
(1)
、在适当的目录编写applet代码
(2)
、在所在目录的Makefile.in文件中,增加相应的 applet配置
(3)
、在所在目录的 config.in文件中,增加applet的图形配置
(4)
、在include/usage.h中增加相应的usage说明
(5)
、在 inlucde/applet.h中增加相应的applet,注意必须保证其正确的按母排序

6
、其它 BusyBox本身为了减化期间,在很多时间不提供配置,比如你想要改telnetd的端口,那么,你要做的通常是去修源代码,后重新编译成busybox.

  评论这张
 
阅读(305)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017