移植Busybox到宿主机
今天,我们要做的不是把Busybox移植到开发板上,而是要移植到我们的主机上:
任何一个可启动的Linux都由三部分组成:引导程序,内核映像和文件系统,下面依次介绍。
一 引导程序:
为了不要太复杂,今天的实验假设我们的主机上已经安装好了grub(像本人,安装好Ubuntu后就自动装好了grub,因此这步直接跳过),我们就用它来启动我们的迷你Linux。
二 内核映像(vmlinuz)
直接在 http://www.kernel.org/ 上下载Linux的源代码,然后编译,注意目标平台是x86就行了,在此不再赘述(详细过程参见我的另一篇文章:http://blog.csdn.net/htttw/article/details/7215873),编译好之后,会在arch/x86/boot下生成bzImage(make bzImage)或zImage(make zImage),然后copy到/boot下:
sudo cp arch/x86/boot/bzImage /boot/vmlinuz
三 文件系统(initrd.gz)
我们用Busybox来构建我们的文件系统:
1.
在 http://busybox.net 下载Busybox,我的版本是busybox-1.19.3.tar.bz2
2.
tar jxvf busybox-1.19.3.tar.bz2
cd busybox-1.19.3
make menuconfig //跟配置Linux是一样的
这里特别注意,在Busybox Settings --> Build Options 里务必选上“Build BusyBox as a static binary (no shared libs)”表示把Busybox编译成静态库!
其他保持默认值,然后保存
make
make install
就会生成_install文件夹
(具体配置过程参见我的另一篇文章:http://blog.csdn.net/htttw/article/details/7215874)
这里插一句:其实我们现在就可以测试了,和最终的效果是一样的:
cd _install
cd ..
sudo chroot /_install /bin/sh
这样就进入了Busybox了~~
上面只是准备工作,下面才开始好玩了:
生成的_install目录下只有bin,sbin等目录,所以为了构建Linux文件系统,我们必须创建其他目录:
cd _install
mkdir proc sys etc dev
然后创建console和null设备文件
cd dev
sudo mknod console c 5 1
sudo mknod null c 1 3
然后创建etc下的相关文件:
init进程是内核创建的第一个进程,他会解释执行/etc/inittab里的命令,然后执行init.d/rcS脚本文件,在这个脚本文件里我们需要挂载文件系统,至于挂载哪一个文件系统,就由fstab文件决定:
首先创建fstab文件:
cd etc
vim fstab,输入以下内容:
然后创建rcS脚本文件:
cd etc
mkdir init.d
cd init.d
vim rcS,输入以下内容:
chmod +x rcS 这步不要忘记!
然后创建inittab文件:
cd etc
vim inittab,输入以下内容:
然后:
切换到_install目录下
rm linuxrc
输入如下命令:
ln -sv bin/busybox init(如图)
最后,我们把_install目录做成我们的根文件系统:
输入如下命令:
find . | cpio --quiet -H newc -o | gzip -9 -n > ../initrd.gz(如图)
最后把生成的initrd.gz复制到/boot下
sudo cp initrd.gz /boot
至此,以上三步全部完成,下面终于要启动我们的桌面版Busybox啦~~
重启,在grub引导菜单处输入“c"进入grub命令模式,在命令模式下,我们要告诉grub加载我们第二步做的内核映像vmlinuz和第三步做的文件系统initrd.gz,输入如下命令:
linux /boot/vmlinuz //指定内核映像的路径(如果提示没有linux命令时,改成kernel /boot/vmlinuz试试)
initrd /boot/initrd.gz //指定文件系统的路径
boot //开始引导
如果一切没有问题,就会进入Shell,等待我们输入命令啦,这就是我们的桌面Busybox,呵呵,挺好玩的~~
我测试的时候,在_install下mkdir了一个目录,然后进入Busybox里ls了一下发现了这个目录,说明我确实进入了Busybox啦,另外,我还把生成的_install/bin下的date链接删除了,然后进入Busybox里输入date提示没有这个命令,但输入busybox date就输出当前时间了,也说明我确实进入了Busybox啦~~
另外,按“Ctrl+Alt+Del”可以重启哦~~
完成!
参考:
利用busybox制作一个小巧的linux系统(仅两个文件):
http://www.cnblogs.com/yangnas/archive/2010/04/26/1721607.html