BusyBox原理简单分析

刚刚接触嵌入式不久花了半天的时间大体上看了看BusyBox下面我对BusyBox的原理进一个肤浅的分析(在网上我不有找到相关的内容).

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

  • BusyBox利用Linux实用工具中代码大量重复的事实系统/运维,将重复的代码重新整理,放到一个文件中,减少了多次包含。
  • BusyBox通过简化非必linux是什么操作系统要的原代码复杂功能,减少占用的空间。
  • BusyBox的完全可定制性,提供了非常灵活,宜于扩展的结构。

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

  • 直接使用BusyBox

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

[ arg... ] 例如:ln -s​​ /b系统/运维in/busybox​​ ls ./ls 将同样执行 ls的命令

3、BusyBox源码分析 BusyBox源码算是一个比较庞大的工程,但是该工系统90%e7%bb%b4%e5%b7%a5%e7%a8%8b" target="_blank">运维工程师程整体上看可以分为三个部分来讲述:

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

  • (2) BusyBo冰原代码x实用库

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

  • (3) BusyBox的Applet扩展

BusyBox本身没有多大的实用价值,更为重要的是BusyBox的Applet为我们提供了实用功能。Busybox的applets按功能被分散在源码的各个目录下面。BusyBox本身系统/运维也是linux重启命令一个applet.它的定义就在busybox.c中,其入口点是busybox_main. 举例说明:cp命令的实系统运维工程师现,cp被放在 coreutils下面的cplinux重启命令.c中,可以看到该文件中只有一个函数,cp_main(),该函数就是 cp命令的入口地址,而copy的最关键系统运维面试题及答案js源码分析的步骤:DOlinux_COPY的实现,则是通过调用copy_file()来实现的。 copy_file这个函数被多个命令使用到,比如mv.c系统/运维p等,它被放在libbb的copyfile.c中.

4、BusyBox源中的一些脚本分析

(1) applets /busybox.mkll, 该脚本通过分析i系统运维面试题及答案nclude/config.h和 inlcude/applets.h两个文件来得到被配置的文件的链接linux常用命令

(2) applets/inst原代码all.sh, 该脚本根据busybox.mkl系统运维工程师l生成的busybox.link来建冰原代码立链接文件

(3) 源码目录下的Makefile,提供了mak源码分析e menuconfig对源码进行配置,生成.config文件,make将生成linux除文件命令busybox.

5、扩展BusyBox的功能

请参考docs/new_applet-HOWTO.txt文档

(1) 、在适当的目录编写applet代码

(2)、在所在目录的Makefile.in文件中,增加相应的 applet配置

(3)、在原代码所在目录的 config.in文件中,增加applet的图形配置

(4)、在include/u系统运维工程sage.h中增加相应的usage说明

(5)、在 inlucde/applinux创建文件let.h中增加相应的applet,注意必须保证其正确的按母排序

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