一、什么是busybox
BusyBox 是很多标准 Linux® 工具的一个单个可执行实现。BusyBox 包含了一些简单的工具,例如 cat 和 echo,还包含了一些更大、更复杂的工具,例如 grep、find、mount 以及 telnet(不过它的选项比传统 的版本要少);有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。
原理是:很多标准 Linux 工具都可以共享很多共同的元素。例如,很多基于文件的工具(比如 grep 和 find)都需要在目录中搜索文件的代码。当这些工具被合并到一个可执行程序中时,它们就可以共享这些相同的元素,这样可以产生更小的可执行程序。实际上,BusyBox 可以将大约 3.5MB 的工具包装成大约 200KB 大小。
特点是:
1.BusyBox利用Linux实用工具中代码大量重复的事实,将重复的代码重新整理,放
到一个文件中,减少了多次包含。
2.BusyBox通过简化非必要的复杂功能,减少占用的空间。
3.BusyBox的完全可定制性,提供了非常灵活,宜于扩展的结构。
二、用法:
1.busybox [arguments...] # or
比如运行echo命令:
$./busybox echo “This is busybox”
This is busybox
2. [arguments...] # if symlinked
这种用法的前提是建立了符号连接。比如:
$ ln -s busybox ls
$ ./ls /
bin cdrom etc lib media opt root selinux sys var
boot dev home lost+found mnt proc sbin srv tmp usr
BusyBox 中的命令并不支持所有可用选项,不过这些命令都包含了常用的选项。如果我们需要知道一个命令可以支持哪些选项,可以使用 –help 选项来调用这个命令
三、配置并编译 BusyBox
(一)默认配置
1.下载最新源代码:http://www.busybox.net/downloads/,我下载的版本是
busybox-1.13.4。
2.不用说都要解压源码包:$ tar jxvf busybox-1.13.4.tar.bz2
3.在解压后的源码包中配置:
$ make defconfig #使用默认的配置
$ make #编译源码
4.到这一步已经生成了一个相当大的busybox的映像,此时就可以使用busybox程序了,用法上面已经提到过,比如:
$ ./busybox echo “this is a busybox”
this is a busybox
(二)手工配置:
配置成嵌入式Linux使用的busybox,主机Ubuntu9.04,目标板smartarm3250,目标板系统Linux2.6.27,交叉编译器是
/opt/nxp/gcc-4.3.2-glibc-2.7/bin/arm-vfp-linux-gnu-gcc
1.在源码目录下(前提是你下载了源码并解压),执行命令:$ make menuconfig
其中 — Applets 下是对不同种类命令的配置,可以配置是否加入到busybox程序中去。
2.交叉编译:
$make CROSS_COMPILE=
/opt/nxp/gcc-4.3.2-glibc-2.7/bin/arm-vfp-linux-gnu-
其中的CROSS_COMPILE指的是你交叉编译器gcc的路径。也可以通过第一步的配置
界面进入到Busybox Settings —> Build Options —>
() Cross Compiler prefix选择此项,
然后填入“/opt/nxp/gcc-4.3.2-glibc-2.7/bin/arm-vfp-linux-gnu-”,然后再
make即可。
3.到此已经编译为目标板可运行的程序,通过命令
$ file busybox
busybox: ELF 32-bit LSB executable, ARM, version 1, dynamically linked
(uses shared libs), stripped
4.可知编译成功。只需将此程序下载到板子即可运行。
四、扩展BusyBox的功能:添加自己的命令
请参考docs/new_applet-HOWTO.txt文档
a)在适当的目录编写applet代码,在这里我的代码是myls.c,将此代码文件放到coreutils目录下(因为ls.c在此目录)。
b)在所在目录的 Config.in文件中,增加applet的图形配置
config MYLS
bool “myls”
default y
help
myls is used to list the contents of directories.
c)在所在目录的Kbuild文件中,增加相应的 applet编译选项
lib-$(CONFIG_MYLS) += myls.o
d)在include/usage.h中增加相应的usage说明
#define myls_trivial_usage “myls truvial help”
#define myls_full_usage ”myls full usage”
e)在 inlucde/applets.h中增加相应的applet
USE_MYLS(APPLET_NOEXEC(myls, myls, _BB_DIR_BIN, _BB_SUID_NEVER, myls))
经过上面的步骤以后,再make menuconfig进入到Coreutils —> 就会发现有
[*] myls
* 号表明默认配置到busybox中去,默认值在Config.in文件中,可以配置为无。编译成功后就可以像其他命令一样来使用此命令了。
u013546077: 蛮有意思的呢~
u014426398: 没有解释到本质
lijinchaowin: 学习
lookat119: Good~
u011607174: 有个关于SVN的问题,想咨询你,能不能留一个联系方式
zzz_Mraz: 我试了下,好像行末空格和行首空格也可表示为:行首空格:^\s行末空格:\s$中间加个“+”号好蛋疼哈...
qweqazzzz: It does not work.
powerman007: 写博客、英语学习.....嗯。这种方式不错!楼主其实可以去译言网或者163公开课又或者OSCHINA...
limuscle: 谢了,第一种可以,第二种也是提示在使用sudo apt-get install kdevelop时没...
Elisa0812: 非常好!!谢谢啦