一、Busybox简介
BusyBox 是一个集成了一百多个最常用linux命令和工具的软件,他甚至还集成了一个http服务器和一个telnet服务器,而所有这一切功能却只有区区1M左右的大小。BusyBox 包含了一些简单的工具,比如:我们平时用的那些linux命令就好比是分立式的电子元件,而busybox就好比是一个集成电路,把常用的工具和命令集成压缩在一个可执行文件里,功能基本不变,而大小却小很多倍,例如ls、 cat 和 echo等等,还包含了一些更大、更复杂的工具,例如 grep、find、mount 以及telnet。简单的说BusyBox就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了 Android 系统自带的shell。BusyBox 将许多具有共性的小版本的UNIX工具结合到一个单一的可执行文件。这样的集合可以替代大部分常用工具比如:GNU 等工具,BusyBox提供了一个比较完善的环境,可以适用于任何小的或嵌入式系统。在嵌入式linux应用中,busybox有非常广的应用,另外,大多数linux发行版的安装程序中都有busybox的身影,安装linux的时候案ctrl+alt+F2可以切换物理终端,而这个物理终端中的所有命令都是指向busybox的链接.Busybox虽小,但作用确是惊人的,这样就可以基于Busybox制作一张软盘linux。
二、Busybox的用法
最常用的用法是建立指向busybox的链接,不同的链接名完成不同的功能.
#ln -s busybox ls
#ln -s busybox rm
#ln -s busybox mkdir
然后分别运行这三个链接:
#./ls
#./rm
#./mkdir
就可以分别完成了ls rm 和mkdir命令的功能.虽然他们都指向同一个可执行程序busybox
但是只要链接名不同,完成的功能就不同,busybox就是这么的神奇.
三、Busybox安装
1、 这是在红帽5.8的版本上做的,系统上没有ext3的文件系统,因此Busybox要提供ext3系统文件,当然这对于强大的Busybox来说是非常简单的,但是Busybox中没有bash,要想使用直接把它移植过来就可以使用了,还有一点需要注意: Busybox中的init不支持运行级别,要想使用需借助于移植系统自带的init就可以了。
2、 安装前的准备工作
先挂载一个红帽5.8的盘,mount /dev/cdrom /mnt/,接着配置yum库
cd /etc/yum.repos.d/
vim server.repo
安装这两个包 "Development Tools" "Development Libraries" 其中第一个一般都已经装过了,只需要装第二个就可以了: Development Libraries
3、 新建分区和目录,并挂载
3.1 、创建分区
3.2 、创建目录 mkdir /mnt/{sysroot,boot}
3.3 、格式化并挂载
mke2fs -j /dev/hda1
mke2fs -j /dev/hda2
mount /dev/hda1 /mnt/boot/
mount /dev/hda2 /mnt/sysroot/
成功挂载
4、 编译内核,这里使用的是2.6.38.5内核版本
把linux-2.6.38.5.tar.bz2解压到/usr/src/目录下:
配置内核提供./config文件(这里提供了一个样本,名称是kernel-2.6.38.1-i686.cfg)直接将此样本重命名为./config,我们就以它为蓝本来做修改
cd /usr/src/linux
mv kernel-2.6.38.1-i686.cfg ./config
5、 make menuconfig:根据自己的需要对驱动,文件系统及网络做选择性的配置,其中我在配置的时候直接把ext3做成了内核模块
如修改版本号
注意要把PCnet32编译成内核模块
其他的选项可以根据自己的需求改一下就可以了,这里不做演示了
6、 开始我们的编译之旅
6.1、编译
make SUBDIR=arch/
当编译完成后,提供微型系统新内核 (编译需要一段时间,这里的顺序只是为了方便阅读,自己操作时,可先做下面的步骤,等到编译完成后再进行复制内核)
6.2 、提供内核
cp /usr/src/linux/arch/x86/boot/bzImage /mnt/boot/vmlinuz
6 3 、安装 grub
grub-install --root-directory=/mnt/ /dev/had
6.4、编辑配置grub.conf
vim /mnt/boot/grub/grub.conf
7、提供initrd
7.1、编译前准备操作,这里我们用的是Busybox-1.20.2的版本
7.2、编译busybox
进入Busybox的菜单选项中进行选择自己所需要的东西即可,在这里不需要更改太多,把编译选项改一下即可,编译成一个二进制文件,方便移植。过程如下
7.3、编译安装(编译的东西自动保存在了_install目录下)
删除自动为我们创建的链接文件
自行创建一个目录,把_install文件复制到这里,一切配置在这里更改
创建设备文件(5和3是主设备号,1是次设备号)
7.4、创建init脚本,此脚本完成的任务:
1、挂载proc文件系统,proc文件系统是用来输出内核映像的
2、挂载sys文件系统(输出硬件信息)
3、导入内核模块,导入ext3内核模块,否则无法访问真正的文件系统(这里的/dev/hda2格式化为了ext3,如果是格式化成ext2就不要安装这个模块)
vim /tmp/initrd/init
给脚本执行权限:chmod +x init
归档压缩生成initrd文件
8、/mnt/sysroot目录下的文件准备(即根文件的准备
8.1、复制busybox-1.20.2_install目录下的所有文件,把这些文件当做真正的根
cp busybox-1.20.2/_install/* /mnt/sysroot/ -a
8.2、创建所需的目录(在/mnt/sysboot目录下)
mkdir boot root etc/rc.d/init.d var/{log,lock,run} proc sys dev lib/modules tmp home mnt media usr/lib –pv
8.3、创建设备文件
8.4、编辑inittab配置文件
vim /mnt/sysroot/etc/inittab
8.5、编辑rc.sysinit文件
vim /mnt/sysroot/etc/rc.d/rc.sysinit
chmod +x /mnt/sysroot/etc/rc.d/rc.sysinit #给一个执行权限
8.6、编辑配置/mnt/sysroot/etc/fstab
sync #多同步几次
到此基本的微linux就完成了,注意/tmp/initrd/init 脚本中使用的是bash,而Busybox不支持这样shell,此时该如何实现bash的使用呐?下面我们就来演示一下Busybox的扩展功能
四、Busybox的扩展功能:
1、 使用bash命令
这里首先需要复制一下bash命令即可,复制相关命令的脚本内容如下:
vim bincp.sh
#!/bin/bash
#
dest=/mnt/sysroot
libcp() {
libpath=${1%/*}
[ ! -d $dest$libpath ] && mkdir -p $dest$libpath
[ ! -e $dest${1} ] && cp $1 $dest$libpath && echo " copy lib $1 finished"
}
bincp() {
cmdpath=${1%/*}
[ ! -d $dest$cmdpath ] && mkdir -p $dest$cmdpath
[ ! -e $dest${1} ] && cp $1 $dest$cmdpath
for lib in `ldd $1 | grep -o "/.*lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`; do
libcp $lib
done
}
read -p " your command:" cmd
until [ $cmd = 'q' ]; do
! which $cmd && echo "wrong command" && read -p "input again:" cmd && continue
command=`which $cmd | grep -v "^alias" | grep -o "[^[:space:]]\{1,\}"`
bincp $command
echo "copy $command finished."
read -p "continue:" cmd
done
给脚本一个执行权限:chmod +x bincp.sh
怎么样这个脚本好用吧!
 
更改inittab配置文件
vim /mnt/sysroot/etc/inittab
到这里bash就能够启动成功了
2、 实现用户登陆功能
2.1、首先要提供终端即编辑inittab文件内容,直接修改成以下即可
2.2、建立账号(我们可以直接复制本机的root账号的相关信息)
现在我们就可以使用用户来登陆了
3、 添加一个主机名
vim /mnt/sysroot/etc/hostname 自行创建一个hostname文件,添加一行代码即可;如下:
HOSTNAME=MyBusyboxlinux
而加载HOSTNAME这变量需要编辑rc.sysinit脚本文件
vim /mnt/sysroot/etc/rc.d/rc.sysinit 添加一下代码即可:
4、提供用户登陆界面的显示信息
vim mnt/sysroot/etc/issue
My Busybox Linux
Kernel \r on an \m
5、为微型系统提供IP地址
首先复制网卡模块
cp /usr/src/linux/drivers/net/pcnet32.ko /mnt/sysroot/lib/modules/
然后设置开机装载网卡驱动
vim /mnt/sysroot/etc/rc.d/rc.sysinit 编辑这个配置文件添加以下代码
echo "load ethernet card modules.."
insmod /lib/modules/pcnet32.ko
到这里微型小系统的IP地址就能成功添加了
这就是Busybox的制作过程,你会了吗?