`
yong7181000
  • 浏览: 31107 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

BusyBox源码结构简介

阅读更多

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

 



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

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

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

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

2 BusyBox 的基本用法 可以在原代码的 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 中用 bsearch applets 进行搜索,并返回 applet.applets 的定义是在 include/applets.h 中,是一个常量数组。

(2) BusyBox 实用库

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

(3) BusyBox Applet 扩展

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

4 BusyBox 源中的一些脚本分析

(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.

分享到:
评论

相关推荐

    busybox源码包

    Busybox 源码包结构 在解压后的 `busybox-1.8.2` 文件夹中,主要包括以下几个部分: - `include`: 存放头文件,定义了各种结构体和函数声明。 - `src`: 源代码目录,包含了各个命令的实现。 - `config`: 配置文件...

    busybox源码 包 很好的

    2. **源码结构**: Busybox的源码组织结构清晰,主要由几个部分组成:主程序(main.c)、配置文件(Config.in)以及各个子命令的源代码。每个子命令都是一个单独的C文件,通过在配置文件中启用或禁用来选择包含哪些...

    busybox 1.18源码 porting busybox

    在这个项目中,我们关注的是将Busybox 1.18源码移植到特定的目标平台。 源码包`busybox-1.18.4.tar.bz2`是Busybox 1.18.4版本的源代码,使用`.tar.bz2`格式进行压缩,这种格式能提供良好的压缩比,减少下载和存储的...

    修正编译过的busybox的源码,验证过在android上能使用

    标题提到“修正编译过的busybox的源码,验证过在android上能使用”,这意味着我们讨论的是如何针对Android平台定制和编译Busybox。 首先,你需要从官方网站或者Git仓库获取Busybox的源代码,这里给定的是版本1.20.2...

    6、BusyBox源码,busybox编译,C,C++源码.zip

    它的设计原则是小巧、高效,因此源码结构紧凑,便于理解和裁剪。 2. **配置文件**:`config.in` 和 `defconfig` 是配置 BusyBox 的关键文件。`config.in` 定义了可用的配置选项,而 `defconfig` 是一个默认配置,...

    Linux busybox源码

    在深入研究Busybox源码之前,我们首先需要对C语言和Linux系统编程有一定的了解,因为Busybox是用C语言编写的,并且它的功能实现是基于Linux内核接口的。 Busybox源码主要由几个部分组成: 1. **主程序**:busybox...

    busybox 源代码

    Busybox 的源代码结构设计允许开发者根据需要选择要包含的工具,并进行定制化编译。 **2. Busybox 的组成部分** Busybox 包含了大量的 Unix 工具,如: - 文件管理工具:如 `cp`, `mv`, `rm`, `ls`, `mkdir` 等。 ...

    用busybox制作根文件系统

    1. **获取与解压 Busybox 源码** - 访问官方网站 `http://www.busybox.net` 下载最新版本的源码,如 `busybox-1.13.3.tar.bz2`。 - 使用 `tar` 命令解压缩源码包:`tar –jvxf busybox-1.13.3.tar.bz2` - 进入...

    Busybox for Android

    - 阅读 Busybox 源码:对于希望深入了解其工作原理的开发者,研究源码有助于提升技术水平。 - 探索 Android 开发:结合 Busybox,学习 Android 系统结构和开发实践,可以提高解决问题的能力。 在日常使用或开发过程...

    busybox_Qt

    - **进入源码目录**:通过`cd busybox-1.20.2`命令进入解压后的BusyBox源码目录。 - **配置**:使用`make menuconfig`命令打开配置界面。对于初学者而言,建议使用默认配置。但需注意以下几点: - 设置**交叉编译...

    使用busybox-1.21.1制作根文件系统

    首先,我们需要从官方网站下载BusyBox源码。BusyBox是一个开源项目,它集合了许多常见的Unix实用程序,旨在为小型系统提供一个轻量级的解决方案。在本例中,我们下载的是版本1.21.1,可以从...

    busybox1.20.2

    5. **安装**:压缩包中的 `_install` 文件夹包含了安装所需的目录结构,你可以将编译好的 `busybox` 文件复制到这个文件夹下的 `/bin` 目录。在 Android 设备上,通常需要 root 权限才能将 `busybox` 安装到 `/...

    LInux Busybox

    #### 一、Busybox简介与系统构建 Busybox 是一个为嵌入式设备设计的软件包,它集成了大量的标准 Unix 工具到一个单一的小型可执行文件中。这使得Busybox成为了一个理想的工具集合,尤其适用于资源受限的环境。 在...

    最新版busybox-1.19.4

    4、把busybox源码目录下的etc的内容拷贝到这里的etc下 [root@Sure rootfs]# cd etc/ [root@Sure etc]# cp -a /home/jacky/busybox-1.11.1/examples/bootfloppy/etc/* ./ 5、修改拷贝过来的profile文件 [root@...

    用busybox 定制一个很小的文件系统

    BusyBox的源码包下载完成后,需要对其进行配置并编译。 ```bash tar jxvf busybox-1.10.3.tar.bz2 mv busybox-1.10.3 busybox cd busybox ``` 修改`Makefile`以设置正确的架构和交叉编译器路径: ```bash vi ...

    用BusyBox-1.1.3制作根文件系统详解.doc

    如果遇到找不到内核版本头文件的错误,可以将内核源码中的`version.h`复制到交叉编译器的相应路径下,或者直接修改`loop.c`中的#include路径。 3. **创建CramFS镜像** `CramFS`是一种只读文件系统,常用于嵌入式...

    文件系统制作(arm-linux-gcc,busybox,和指导书).zip

    配置BusyBox:下载并解压BusyBox源码,根据目标设备的特性进行配置,选择需要包含的命令和功能。 c. 编译BusyBox:使用arm-linux-gcc编译配置后的BusyBox源码,生成静态链接的可执行文件。 d. 创建根文件系统目录...

    md5sum源码-嵌入式平台适用

    在嵌入式Linux系统中,MD5SUM的实现可能是一个独立的命令行工具,也可能集成在 BusyBox 这样的轻量级实用工具集中。源码通常包括以下几个核心部分: 1. **数据读取**:程序需要能读取文件,这可能涉及标准I/O库或...

Global site tag (gtag.js) - Google Analytics