嵌入式Linux中BusyBox的使用

转载 2015年11月19日 21:34:25

BusyBox是很多标准 Linux 工具的一个单个可执行实现,主要应用于嵌入式linux系统,是一个开源的“万能工具”。接下来我们一起来看看这个工具的魅力。

万能的BusyBox

BusyBox最为一个可执行文件,却集成了「cp」「init」「ping」等基本的shell命令。
基于嵌入式linux的系统上,比如数字电视,MP3,音响,小型服务器,路由器等等机器上都会搭载 BusyBox。可以说嵌入式linux世
界中,BusyBox是一个最基本的工具模块。

为什么在嵌入式系统中使用 BusyBox

在嵌入式linux领域,BusyBox被广泛使用,其理由可以总结为以下两点:

  • 减小文件尺寸
 在嵌入式系统中,做为文件系统保存的辅助记忆装置,考虑到信赖性和成本问题,Flash ROM被经常使用(数Mbytes~数十Mbytes)。这一来就限制了辅助记忆装置的容量大小。

 作为嵌入式的工程师,你是否也是是追求最小尺寸的系统,和最优化的性能組呢?通常,linux系统中导入了很多的命令。
这些命令中也许有许多你不需要的,或者命令中不需要的参数,又或者虽是不同命令却拥有相同的处理函数,对于嵌入式系统
来说,这些都是没用的资源浪费。另外在这之上,每个命令若要执行,系统还需要一个管理信息(2~4kbytes),随着命令的
增多,这个尺寸也是非常可观的。

 正是由于这些原因,BusyBox将没用的功能彻底的去处,管理信息也做到只有一个,这样最大限度的节省了文件的尺寸。
  • 减轻编译工作量
 如果是为PC安装程序,只要将二进制文件安装在Linux分区上面即可。但是,在嵌入式系统上,由于硬件,和其用途多种多
样,是不会有那样的二进文件的。所以,为了使用不同的应用程序,必须从不同的源代码来编译。并且,根据不同应用程序的
需要,编译的方法也可能不同,使编译工作变得更加繁琐。

 另一方面,BusyBox自己就集成了各种应用程序的功能,所以说只要编译了BusyBox,就解决了很多的编译问题。

BusyBox的构造



BusyBox的构造如下图所示:

图1 BusyBox的构成

Applet是一个命令的集合。比如,“init Applet”提供了init的功能。“ping Applet”提供了ping的功能。另外,libbb是
各个Applet间公用的函数集合。各个Applet尽量使用libbb中定义的函数,使BusyBox的尺寸达到最小。另外,各个Applet的程
序基本上不使用原有相同命令的源代码,而是为了减小文件尺寸重新编写过的。

除此之外,BusyBox除了利用libbb来消减文件尺寸外,还有其他的优化措施。比如,将不常用的命令参数省略,错误代码也减
小到1个字节。甚至还有省掉释放内存的free函数等等。

BusyBox的功能


BusyBox就是一柄锋利的瑞士军刀
BusyBox集成了各种linux的标准命令,毫不夸张的说,BusyBox可以简单地作为一个linux的发布环境(distribution)。
比如,shell,editor(vi,sed,awk等), 系统管理(coreutils、tar、bzip等),网络应用(ping、ifconfig、wget等),用
户管理(login、su、useraddな等),各种服务(crond、syslogd、httpd等),SELinux管理(load_policy、restorecon等)。


不用考虑BusyBox而执行各种命令
以下是BusyBox在系统目录下的构造:
1
2
3
4
# ls -l /bin
(...)
/bin/cat -> /bin/busybox
/bin/ls -> /bin/busybox

从其构造可以看出,/bin/cat或者/bin/ls都是指向/bin/busybox的符号链接。/bin/busybox是BusyBox的实体。作为参
数,/bin/busybox的argv[0]被设置为各个命令的名字。

比如,当执行/bin/cat的时候,实际执行的是/bin/busybox。这里busybox的argv[0]为/bin/cat。/bin/busybox内部,利用
argv[0]将cat Applet启动,执行cat命令。

安装BusyBox

将下载的BusyBox源代码解压,编译:

1
2
$ tar jxvf busybox-1.9.0.tar.bz2
$ cd busybox-1.9.0

编译之前,可以设置包含applet的项目。

1
$ make menuconfig

这个画面和编译Linux内核是的画面是一样的。通过它,我们可以指定包含的项目。
比如,选择「Coreutils」之后,进入下面的画面。

从图中可以看到cat和cp等命令已经被选择。你可以通过[Y]键来选择,[N]键来解除选择。全部选好后选择[Exit]退出,点击下图的[Yes]保存。

接下来执行 make ; make install 来编译和安装BusyBox。
缺省情况下BusyBox被安装在当前目录下的「_install」目录。

1
2
3
4
5
6
7
8
9
10
11
$ ls -l _install/bin
lrwxrwxrwx 1 ynakam ynakam      7 Jan  7 22:36 addgroup -> busybox
lrwxrwxrwx 1 ynakam ynakam      7 Jan  7 22:36 adduser -> busybox
lrwxrwxrwx 1 ynakam ynakam      7 Jan  7 22:36 ash -> busybox
-rwxr-xr-x 1 ynakam ynakam 626080 Jan  7 22:36 busybox
lrwxrwxrwx 1 ynakam ynakam      7 Jan  7 22:36 cat -> busybox
rwxrwxrwx 1 ynakam ynakam      7 Jan  7 22:36 chgrp -> busybox
lrwxrwxrwx 1 ynakam ynakam      7 Jan  7 22:36 chmod -> busybox
lrwxrwxrwx 1 ynakam ynakam      7 Jan  7 22:36 chown -> busybox
lrwxrwxrwx 1 ynakam ynakam      7 Jan  7 22:36 cp -> busybox
(...)

在实际的嵌入式系统上,必须使用和系统CPU相吻合的编译器编译。比如arm上编译的时候,我们就像以下在host上指定跨平台编译器。

1
$ make CROSS_COMPILE=arm-linux-

之后安装还是 make install ,同样在_install目录下生产编译好的结果,你只要拷贝到目标机就行了。

其他

BusyBox是以GPL发布的。所以,如果修改了BusyBox后移植到嵌入式系统机器,并贩卖的情况下,必须公开你的BusyBox源码。
正在开发中BusyBox的subversion目录是这里

嵌入式Linux使用Busybox init进程启动过程分析

一、Busybox     Busybo是一个遵循GPLv2协议的开源项目。Busybox将众多的Linux命令集合进一个很小的可执行程序中,可以用来替换GNU fileutils shelluti...

嵌入式Linux使用Busybox init进程启动过程分析

一、Busybox     Busybo是一个遵循GPLv2协议的开源项目。Busybox将众多的Linux命令集合进一个很小的可执行程序中,可以用来替换GNU fileutils shellu...

使用BusyBox制作嵌入式Linux根文件系统

使用BusyBox制作嵌入式Linux根文件系统 STEP 1:构建目录结构  创建根文件系统目录,主要包括以下目录 /dev  /etc /lib  /usr  /var /proc /t...
  • yi412
  • yi412
  • 2015年06月08日 21:10
  • 688

嵌入式linux下使用busybox的crond服务的方法+问题及解决

crond是一个服务,一个守护进程。crond 是linux用来定期执行程序的命令,crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。 crontab 是用来让...

BusyBox——嵌入式Linux中的瑞士军刀

转自:http://hi.baidu.com/guoggn/blog/item/eefc706072bcbccc8db10d91.html   BusyBox (http://www.busybox....

嵌入式linux开发学习笔记之运用BusyBox构建根文件系统

首先在讲解如果运用BusyBox构建根文件系统

嵌入式linux init系统(busybox init)

(一)System V init 首先我们来讨论PC上运行的Linux系统,它启动后从BIOS开始,进入bootloader,有bootloader加载内核,进入内核初始化。内核启动的最后一步就是创...

嵌入式linux busybox ntp时间同步

转自:http://hi.baidu.com/uc100200/blog/item/cccef6b517b512de37d3ca02.html一、背景机器装的是busybox,使用的是最小集合的lin...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:嵌入式Linux中BusyBox的使用
举报原因:
原因补充:

(最多只允许输入30个字)