busybox简介及使用

2019-07-13 07:22发布


1 简介
busybox 是一个集成了一百多个最常用linux命令和工具的软件,ta甚至还集成了一个http服务器和一个telnet服务器,而所有这一切功效却只有区区1M左 右的大小.wo们平时用的那些linux命令就好比是分立式的电子元件,而busybox就好比是一个集成电路,把常用的工具和命令集成紧缩在一个可执行文件里,功效基础不变,而大小却小很多倍,在嵌入式linux运用中,busybox有非常广的利用,另外,大多数linux发行版的安装程序中都有 busybox的身影,安装linux的时候案ctrl+alt+F2就能得到一个节制台,而这个掌握台中的所有命令都是指向busybox的链接.Busybox的小身体大作用的特性,给制造一张软盘的linux带来了及大便利.
BusyBox 被称作 “The Swiss Army Knife of Embedded Linux”,它仅仅用一个可执行文件就可以提供一个基础的 Linux 操作系统所需的常用命令。不但体积小,配置起来也便利,只需很少的配置文件即可以运行。一个由 BusyBox 构成的 Linux 操作系统加上内核完整可以做到只占用 2、3M 空间,甚至可以更小。
BusyBox 是 Linux 下的一个开放源代码软件,编译的时候需要 gcc 和 glibc 的支撑,也可以用 uClibc 取代 glibc。以当前的 BusyBox 1.1.3 来说,系统需求为:
内核 linux 2.4 / linux 2.6
gcc 3.4 以上
glibc 2.2 以上
如果使用 uClibc 0.9.27 以上
BusyBox 可以提供的命令非常多,它们被称作 applet。下表对 BusyBox 能够提供的 applet 分类举例,注意:这个表并不完全,只是举例而已。
体系 init, login, su, passwd, getty, sh
内核模块 insmod, lsmod,  , modprobe
文件体系 e2fsck, mke2fs, fsck.minix, mkfs.minix
文档 gzip, tar, awk, sed, vi, find, grep
常用 cat, cp, dd, cut, ln, ls, mkdir, mv
网络 ping, ifconfig, ip, nc, wget, telnet, udhcpc, tftp, traceroute
网络服务 httpd, telnetd, udhcpd

2 获取
2.1 下载
Red Hat Linux 一般会附带一个 BusyBox,但是它的功效较弱,最好的方式还是到 http://www.busybox.net/downloads/ 下载一个源代码包,然后自身编译。当前最高版本是 1.2.0(6 月 30 日更新),但最好不要使用它,wo至少发明它有一个致命 bug。所以还是使用 1.1.3 比拟好,当然,如果有更新的也可以试一下。
2.2 编译
首先将下载的 busybox-1.1.3-tar.bz2 解压到一个目录中,然后在里面运行以下的命令,对源代码进行配置:
[root@redhat9 busybox-1.1.3]# make menuconfig
相信有过编译内核经验的人对这个界面应当很熟习,在这个莱单里可以对 BusyBox 的编译方法进行选择,例如是静态编译还是动态编译,是使用 glibc 还是 uClibc 等;也可以选择ni所须要的 applet。
如果ni的操作系统是 Red Hat Linux 9.0 那么有两个问题ni需要注意一下:
不要选择使用 Support NSA Security Enhanced Linux;
如果选择了 Linux Ext2 FS Progs 下的任何一个 applet,那么就必需更新ni的 make,make-3.81 可以是一个选择。
完成配置后,接下来就容易了:
[root@redhat9 busybox-1.1.3]# make dep
[root@redhat9 busybox-1.1.3]# make
[root@redhat9 busybox-1.1.3]# make install
正常编译完成后,在当前源代码目录下会生成一个 _install 子目录,里面包括编译好的 busybox 和一些指向它的符号连接。

3 使用阐明
调用 BusyBox 中的 applet 有三种方式(以 ls 命令为例):
给 busybox 带参数 busybox ls
硬衔接 ln busybox ls
ls  
符号连接 ln -s busybox ls
ls  
第三种是最常用的方式,因为在 _install 目录中就已经做好了全体的符号衔接。
有了 busybox 及其符号连接之后,还需要做一些附加工作能力将 BusyBox 作为操作系统使用:
根本目录:除了 _install 中已经有的 bin sbin 两个目录外,还需要树立以下目录,注意 tmp 的权限为 777,root 权限为 750
dev
dev/pts
dev/shm
etc
etc/init.d
lib
proc
tmp
var
root
装备文件:可以从ni正在使用的系统中直接复制,至少需要
/dev/console
/dev/fd
/dev/fd0
/dev/fd0H1440
/dev/hd?
/dev/hd??
/dev/kmem
/dev/null
/dev/zero
/dev/tty
/dev/tty?
共享库支撑:如果ni的 busybox 为动态编译,则需要
/lib/libc.so.6
不论是动态编译还是静态,如果要做 DNS 解析,就必定须要
/lib/libnss_dns.so.2
/lib/libnss_files.so.2
/lib/libresolv.so.2
/etc/resolv.conf
resolv.conf 依据具体环境改动。同时,只要使用了共享库,就须要
/lib/ld-linux.so.2
/sbin/ldconfig
/etc/ld.so.conf
ld.so.conf 依据具体环境改动。注意:wo这里给出的共享库文件名可能只是符号衔接,必定要同时拷贝原始文件。另外,如果ni使用的是 uClibc,那么请参考相应文档。

配置文件:至少需要下表文件:
/etc/protocols
/etc/services 这两文件可以直接从当前系统中复制
/etc/host 去掉不必要条目,但最少要保存“127.0.0.1 localhost”
/etc/passwd
/etc/shadow  去掉过剩的用户信息,保存root和系统用户名,注意修正 shadow 之前要先给它可写权限
/etc/fstab 去掉过剩的 mount 点,但至少保存以下条目:
/dev/hda1 / ext2 defaults 1 1
none /dev/pts devpts gid=5,mode=620 0 0
none /proc proc defaults 0 0
none /dev/shm tmpfs defaults 0 0
注意第一行,这里指定将 /dev/hda1 作为根目录 /,ni可以依据自身的实际需求更改

/etc/mtab mount 点信息,让它为空
/etc/resolv.conf 配置 DNS 解析,这里给出一个例子:
nameserver 202.103.0.117
search localdomai

/etc/ld.so.conf 包括共享库的目录列表,qq视频聊天,可认为空
etc/inittab 不要使用尺度的 inittab,因为它和 BusyBox 的 init 不兼容。在 BusyBox 源代码目录中有一个 inittab 的样本,可以在它的基本之上改动。可修正的项目有:登录方法,启动脚本 rcS 的地位,指定关机脚本等。可以不使用这个文件
etc/init.d/rcS 这是 BusyBox 体系特有的启动脚本。BusyBox 使用的 init 是没有运行级别之分的,默认情形下,它在启动之后,会先调用 /etc/init.d/rcS,然后等候登录。所以wo们可以在这个脚本中做一些初始化工作。这里给出一个简略的例子,注意要给它可执行权限:
#!/bin/sh

/bin/mount /proc
/bin/mount -o remount,rw /
/bin/mount -a
ifconfig lo 127.0.0.1 broadcast 127.255.255.255 netmask 255.0.0.0
ifconfig lo up
route add -net 127.0.0.0 netmask 255.0.0.0 dev lo

etc/busybox.conf 设置 user ID,如果在编译 BusyBox 时没有选择“Support for SUID/SGID handling”,则可以不使用这个文件。在设置 busybox.conf 的同时,还要给 bin/busybox 加上“s”属性,下面是 busybox.conf 的一个例子:
# /etc/busybox.conf
[SUID]
su = sx- root.500
将 上述所有的东西,包含 busybox 及其符号连接、基础目录、装备文件、配置文件以及可能需要的共享库及相干文件等等,全体按其应有的地位做到一个目录(如 _install)中备用,接下来是做成 initrd 还是微型的 Linux 启动盘,甚至是用于嵌入式系统中,就看各自的需求了