出处: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-1.8.2` 文件夹中,主要包括以下几个部分: - `include`: 存放头文件,定义了各种结构体和函数声明。 - `src`: 源代码目录,包含了各个命令的实现。 - `config`: 配置文件...
2. **源码结构**: Busybox的源码组织结构清晰,主要由几个部分组成:主程序(main.c)、配置文件(Config.in)以及各个子命令的源代码。每个子命令都是一个单独的C文件,通过在配置文件中启用或禁用来选择包含哪些...
在这个项目中,我们关注的是将Busybox 1.18源码移植到特定的目标平台。 源码包`busybox-1.18.4.tar.bz2`是Busybox 1.18.4版本的源代码,使用`.tar.bz2`格式进行压缩,这种格式能提供良好的压缩比,减少下载和存储的...
标题提到“修正编译过的busybox的源码,验证过在android上能使用”,这意味着我们讨论的是如何针对Android平台定制和编译Busybox。 首先,你需要从官方网站或者Git仓库获取Busybox的源代码,这里给定的是版本1.20.2...
它的设计原则是小巧、高效,因此源码结构紧凑,便于理解和裁剪。 2. **配置文件**:`config.in` 和 `defconfig` 是配置 BusyBox 的关键文件。`config.in` 定义了可用的配置选项,而 `defconfig` 是一个默认配置,...
在深入研究Busybox源码之前,我们首先需要对C语言和Linux系统编程有一定的了解,因为Busybox是用C语言编写的,并且它的功能实现是基于Linux内核接口的。 Busybox源码主要由几个部分组成: 1. **主程序**:busybox...
Busybox 的源代码结构设计允许开发者根据需要选择要包含的工具,并进行定制化编译。 **2. Busybox 的组成部分** Busybox 包含了大量的 Unix 工具,如: - 文件管理工具:如 `cp`, `mv`, `rm`, `ls`, `mkdir` 等。 ...
1. **获取与解压 Busybox 源码** - 访问官方网站 `http://www.busybox.net` 下载最新版本的源码,如 `busybox-1.13.3.tar.bz2`。 - 使用 `tar` 命令解压缩源码包:`tar –jvxf busybox-1.13.3.tar.bz2` - 进入...
- 阅读 Busybox 源码:对于希望深入了解其工作原理的开发者,研究源码有助于提升技术水平。 - 探索 Android 开发:结合 Busybox,学习 Android 系统结构和开发实践,可以提高解决问题的能力。 在日常使用或开发过程...
- **进入源码目录**:通过`cd busybox-1.20.2`命令进入解压后的BusyBox源码目录。 - **配置**:使用`make menuconfig`命令打开配置界面。对于初学者而言,建议使用默认配置。但需注意以下几点: - 设置**交叉编译...
首先,我们需要从官方网站下载BusyBox源码。BusyBox是一个开源项目,它集合了许多常见的Unix实用程序,旨在为小型系统提供一个轻量级的解决方案。在本例中,我们下载的是版本1.21.1,可以从...
5. **安装**:压缩包中的 `_install` 文件夹包含了安装所需的目录结构,你可以将编译好的 `busybox` 文件复制到这个文件夹下的 `/bin` 目录。在 Android 设备上,通常需要 root 权限才能将 `busybox` 安装到 `/...
#### 一、Busybox简介与系统构建 Busybox 是一个为嵌入式设备设计的软件包,它集成了大量的标准 Unix 工具到一个单一的小型可执行文件中。这使得Busybox成为了一个理想的工具集合,尤其适用于资源受限的环境。 在...
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的源码包下载完成后,需要对其进行配置并编译。 ```bash tar jxvf busybox-1.10.3.tar.bz2 mv busybox-1.10.3 busybox cd busybox ``` 修改`Makefile`以设置正确的架构和交叉编译器路径: ```bash vi ...
如果遇到找不到内核版本头文件的错误,可以将内核源码中的`version.h`复制到交叉编译器的相应路径下,或者直接修改`loop.c`中的#include路径。 3. **创建CramFS镜像** `CramFS`是一种只读文件系统,常用于嵌入式...
配置BusyBox:下载并解压BusyBox源码,根据目标设备的特性进行配置,选择需要包含的命令和功能。 c. 编译BusyBox:使用arm-linux-gcc编译配置后的BusyBox源码,生成静态链接的可执行文件。 d. 创建根文件系统目录...
在嵌入式Linux系统中,MD5SUM的实现可能是一个独立的命令行工具,也可能集成在 BusyBox 这样的轻量级实用工具集中。源码通常包括以下几个核心部分: 1. **数据读取**:程序需要能读取文件,这可能涉及标准I/O库或...