busybox

一、什么是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 <applet> [arguments...]  # or

比如运行echo命令:

$./busybox echo “This is busybox”

This is busybox

2.<applet> [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文件中,可以配置为无。编译成功后就可以像其他命令一样来使用此命令了。

 

 

 

原文来自 :

http://blog.chinaunix.net/u2/74234/showart_2163353.html

你可能感兴趣的:(linux,工具,compiler,图形,applet,编译器)