●bin sbin lib etc proc sys dev boot
在制作initrd.gz是时候我们使用busybox虚拟出了各种我们所需要的bin,sbin和usr目录下我们所需要的脚本,在制作真正的root分区的时候我们也使用同样的方法。
这些内容都在initrd.gz中提到
cp /tmp/busybox-1.20.2/_install/* /mnt/sysroot/ -a
cd /mnt/sysroot
rm linuxrc -f
mkdir -p proc sys etc/rc.d/init.d tmp dev/pts boot var/log lib/modules
mknod /mnt/sysroot/dev/console c 5 1
mknod /mnt/sysroot/dev/null c 1 3
内核初始化完成后就要进行init进程的管理,而管理init的配置文件是/etc/inittab文件,/etc/inittab定义了系统默认启动级别,操作系统的初始化,虚拟终端的启动等内容;而OS的初始化需要用到一个非常重要的配置文件,即/etc/rc.d/rc.sysinit,这个文件是操作系统能够启动的核心文件。因此我们在小linux中也要创建相对应目录下的/mnt/sysroot/etc/inittab,/mnt/sysroot/etc/fstab,/mnt/sysroot/etc/sysctl.conf,和/mnt/sysroot/etc/rc.d/rc.sysinit这些个文件
我们先来编辑/mnt/sysroot/etc/inittab文件
vim /mnt/sysroot/etc/inittab 创建inittab文件
::sysinit:/etc/rc.d/rc.sysinit 表示执行系统初始化,使用的是/etc/rc.d/rc.sysinit脚本
::respawn:-/bin/sh 表示系统一旦退出/bin/sh,则会立即重新启动/bin/sh
::shutdown:/bin/umount -a -r 表示当执行shutdown的时候,系统卸载所有的文件系统
接下来编写/mnt/sysroot/etc/fstab这个文件,它是保重系统初始化过程中挂载/etc/fstab中的所有设备
vim /mnt/sysroot/etc/fstab 创建/fstab文件
设置fstab中的各项参数
proc /proc proc defaults 0 0 表示把proc挂载至/proc,文件系统类型是proc,选项是默认选项,不备份也不检查
sysfs /sys sysfs defaults 0 0 表示把sysfs挂载至/sys,文件系统类型是sysfs,选项是默认选项,不备份也不检查
/dev/hda1 /boot ext3 defaults 0 0 表示把/dev/hda1挂载至/boot,文件系统类型是ext3,选项是默认选项,不备份也不检查
/dev/hda2 / ext3 defaults 0 0 表示把/dev/hda2挂载至/,文件系统类型是ext3,选项是默认选项,不备份也不检查
只要在/mnt/sysroot/etc/rc.d/rc.sysinit中使用mount -a的命令,就意味着,系统初始化启动的时候会自动挂载/etc/fstab中我们所设置的这些设备,并挂载到相应的位置。
之后我们来编写内核参数文件/mnt/sysroot/etc/sysctl.conf
vim /mnt/sysroot/etc/sysctl.conf 创建内核参数文件
net.ipv4.ip_forward = 1 1表示开启网络
kernel.hostname=yinshuo.linuxtest 设置主机名为 yinshuo.linuxtest
我们再按照之前寻找ext3和jbd模块的方法来复制pcnet32模块和他所依赖的mii模块,他们是VMware虚拟出的网卡驱动
cp /lib/modules/2.6.18-308.el5/kernel/drivers/net/pcnet32.ko /mnt/sysroot/lib/modules/pcnet32.ko
cp /lib/modules/2.6.18-308.el5/kernel/drivers/net/mii.ko /mnt/sysroot/lib/modules/mii.ko
现在我们来编写系统初始化脚本文件/mnt/sysroot/etc/rc.d/rc.sysinit
vim /mnt/sysroot/etc/rc.d/rc.sysinit 创建系统初始化文件
#!/bin/sh
echo -e "\t\033[31mYinShuo little Linux\033[0m" 以红色字体显示YinShuo little Linux
mount -t proc proc /proc 挂载proc到/proc,文件系统类型为proc
mount -t sysfs sysfs /sys 挂载sysfs到/sys,文件系统类型为sysfs
mount -o remount,rw / 重新以读写的方式挂载根文件系统
mdev -s 探测所有设备,并在dev下创建设备文件
mount -a 挂载/etc/fstab下的所有设备
sysctl -p 使内核参数文件/etc/sysctl.conf立即生效
insmod /lib/modules/mii.ko 装载内核模块mii
insmod /lib/modules/pcnet32.ko 装载内核模块pcnet32
ifconfig lo 127.0.0.1/8 设置本地回环ip=127.0.0.1 netmask=255.0.0.0
ifconfig eth0 172.16.106.9/16 设置网卡eth0的ip=172.16.106.9 netmask=255.255.0.0
chmod +x /mnt/sysroot/etc/rc.d/rc.sysinit 给/mnt/sysroot/etc/rc.d/rc.sysinit执行权限
至此我们的root分区的制作也制作完毕