移植Busybox到宿主机

来源:互联网 发布:农村淘宝政策 编辑:程序博客网 时间:2024/05/01 21:31

移植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

原创粉丝点击