大体思路
boot rootinitrd.gz grub vmlinuz-2.6.18-308.el5 bin sbin lib etc proc sys dev boot
有以上内容我们就可以运行一个非常简单的Linux,只需要往里面添加各种配置文件,就可以启动我们所需要的各种服务。在制作之前,我们先做一些准备工作。
1、在VMware上添加一块新的IDE磁盘
2、将这块盘分区,/dev/hdb1 /dev/hdb2,之后格式化为ext3的文件系统
3、挂载/dev/hdb1到/mnt/boot;挂载/dev/hdb2到/mnt/sysroot
前提工作做完之后,我们就可以分别制作boot和root了!那么我们就开始吧
制作boot分区:
●initrd.gz
initrd.gz其实是一个小的root,它也包含bin sbin lib etc proc sys dev mnt这些目录,并且还有一个重要的脚本文件init,实现从这个小root到我们真正的root的转换的功能。最终为了保证我们的Linux体积足够小,我们就把以上的全部压缩成了initrd.gz。
但是为了保证我们的小linux能够实现各种功能,我们只添加目录是不够的,因此我们使用busybox来虚拟bin sbin usr下的各种程序。因此我们要先制作一个busybox。
我们下载稳定版的busybox版本busybox-1.20.2.tar.bz2
tar -xf busybox-1.20.2.tar.bz2 -C /tmp 把busybox-1.20.2.tar.bz2解压到/tmp目录下
cd /tmp/busybox-1.20.2 切换到 /tmp/busybox-1.20.2目录下
make menuconfig 使用图形窗口对busybox进行编译
进入图形界面后,重要的一项是把busybox所依赖的库文件做进busybox本身,这个库只提供给busybox调度使用;
make install 要确保在/tmp/busybox-1.20.2/目录下使用命令
但是我们会发现安装并不成功
因此我需要下载一个更高版本的内核头文件,然后把它放在/tmp/busybox-1.20.2/include/mtd/
,因为我虚拟机上有linux-2.6.38.5的内核头文件,所以我就直接复制到上面目录下就可以了
mkdir /tmp/busybox-1.20.2/include/mtd 创建mtd目录
cd /tmp/busybox-1.20.2/include/mtd/ 切换至该目录下
cp /usr/src/linux-2.6.38.5/include/mtd/ubi-user.h ./ 把头文件复制到当前目录下
cd /tmp/busybox-1.20.2 再切回原busybox目录下
make install 继续安装就可以了
安装完成后,会在/tmp/busybox-1.20.2/目录下生成一个_install的目录,这表明我们的busybox安装成功了,并且_install目录下有我们所需要的bin sbin usr目录和各种程序脚本。
cp ./_install/* /mnt/boot -a 把_install目录下的所有文件复制到/mnt/boot目录下
cd /mnt/boot 在切换到/mnt/boot目录下,即我们的小linux的boot
可以说现在才开始编写我们真正的initrd.gz
我们发现/mnt/boot目录下缺少很多目录,所以我们手动添加几个进去
mkdir etc proc sys lib/modules/ dev mnt/sysroot tmp -p 创建mnt/sysroot是为了实现根的切换