一、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安装



Busybox中的init不支持运行级别,要想使用需借助于移植系统自带的init就可以了。



2、 安装前的准备工作



先挂载一个红帽5.8的盘,mount /dev/cdrom /mnt/,接着配置yum库



cd /etc/yum.repos.d/



vim server.repo



buzybox容器无法启动 busybox._git



安装这两个包 "Development Tools" "Development Libraries" 其中第一个一般都已经装过了,只需要装第二个就可以了: Development Libraries



buzybox容器无法启动 busybox._数据库_02



新建分区和目录,并挂载



3.1 、创建分区



buzybox容器无法启动 busybox._git_03



3.2 、创建目录 mkdir /mnt/{sysroot,boot}



buzybox容器无法启动 busybox._vim_04



3.3 、格式化并挂载


mke2fs -j /dev/hda1
 
  
mke2fs -j /dev/hda2
 
  
mount /dev/hda1 /mnt/boot/
 
  
mount /dev/hda2 /mnt/sysroot/



buzybox容器无法启动 busybox._vim_05



成功挂载



4、 编译内核,这里使用的是2.6.38.5内核版本


把linux-2.6.38.5.tar.bz2解压到/usr/src/目录下:



buzybox容器无法启动 busybox._buzybox容器无法启动_06



配置内核提供./config文件(这里提供了一个样本,名称是kernel-2.6.38.1-i686.cfg)直接将此样本重命名为./config,我们就以它为蓝本来做修改



cd /usr/src/linux 
  
 
  

    mv kernel-2.6.38.1-i686.cfg ./config


buzybox容器无法启动 busybox._操作系统_07



5、 make menuconfig:根据自己的需要对驱动,文件系统及网络做选择性的配置,其中我在配置的时候直接把ext3做成了内核模块



如修改版本号



buzybox容器无法启动 busybox._vim_08



注意要把PCnet32编译成内核模块



buzybox容器无法启动 busybox._操作系统_09



其他的选项可以根据自己的需求改一下就可以了,这里不做演示了



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



buzybox容器无法启动 busybox._buzybox容器无法启动_10



6.4、编辑配置grub.conf



vim /mnt/boot/grub/grub.conf



buzybox容器无法启动 busybox._vim_11



7、提供initrd



7.1、编译前准备操作,这里我们用的是Busybox-1.20.2的版本



buzybox容器无法启动 busybox._vim_12



buzybox容器无法启动 busybox._vim_13



7.2、编译busybox



buzybox容器无法启动 busybox._buzybox容器无法启动_14



进入Busybox的菜单选项中进行选择自己所需要的东西即可,在这里不需要更改太多,把编译选项改一下即可,编译成一个二进制文件,方便移植。过程如下



buzybox容器无法启动 busybox._git_15



buzybox容器无法启动 busybox._操作系统_16



buzybox容器无法启动 busybox._vim_17



7.3、编译安装(编译的东西自动保存在了_install目录下)



buzybox容器无法启动 busybox._数据库_18



删除自动为我们创建的链接文件



buzybox容器无法启动 busybox._操作系统_19



自行创建一个目录,把_install文件复制到这里,一切配置在这里更改



buzybox容器无法启动 busybox._操作系统_20



创建设备文件(5和3是主设备号,1是次设备号)



buzybox容器无法启动 busybox._vim_21



7.4、创建init脚本,此脚本完成的任务:



1、挂载proc文件系统,proc文件系统是用来输出内核映像的



2、挂载sys文件系统(输出硬件信息)



3、导入内核模块,导入ext3内核模块,否则无法访问真正的文件系统(这里的/dev/hda2格式化为了ext3,如果是格式化成ext2就不要安装这个模块)



vim /tmp/initrd/init



buzybox容器无法启动 busybox._vim_22



给脚本执行权限:chmod +x init



归档压缩生成initrd文件



buzybox容器无法启动 busybox._buzybox容器无法启动_23



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、创建设备文件



buzybox容器无法启动 busybox._操作系统_24



8.4、编辑inittab配置文件



vim /mnt/sysroot/etc/inittab



buzybox容器无法启动 busybox._git_25



8.5、编辑rc.sysinit文件



vim /mnt/sysroot/etc/rc.d/rc.sysinit



buzybox容器无法启动 busybox._buzybox容器无法启动_26



chmod +x /mnt/sysroot/etc/rc.d/rc.sysinit #给一个执行权限



8.6、编辑配置/mnt/sysroot/etc/fstab



buzybox容器无法启动 busybox._操作系统_27



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



buzybox容器无法启动 busybox._vim_28



怎么样这个脚本好用吧!



 



更改inittab配置文件



vim /mnt/sysroot/etc/inittab



buzybox容器无法启动 busybox._vim_29



到这里bash就能够启动成功了



2、 实现用户登陆功能



2.1、首先要提供终端即编辑inittab文件内容,直接修改成以下即可



buzybox容器无法启动 busybox._git_30



2.2、建立账号(我们可以直接复制本机的root账号的相关信息)



buzybox容器无法启动 busybox._vim_31



现在我们就可以使用用户来登陆了



3、 添加一个主机名



vim /mnt/sysroot/etc/hostname 自行创建一个hostname文件,添加一行代码即可;如下:



HOSTNAME=MyBusyboxlinux


而加载HOSTNAME这变量需要编辑rc.sysinit脚本文件



vim /mnt/sysroot/etc/rc.d/rc.sysinit 添加一下代码即可:

buzybox容器无法启动 busybox._buzybox容器无法启动_32



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的制作过程,你会了吗?


转载于:https://blog.51cto.com/jilili/1170368