十一、自动生成/dev下的设备文件
上节用chroot方法试验busybox时,为了简单,是用“绑定”的方式把主机的/dev中的设备文件映射到image目录下的dev目录。在init ramfs上,这种方法显然不能使用。
生成系统的设备文件,现在通常都是用udev动态生成,而init ramfs为了做到通用,动态生成的要求是必须的。在busybox中有一个mdev命令,就是用来动态生成设备文件,填充到/dev目录的。
在系统启动时,用
mdev -s
命令可以根据内核的sysfs文件系统在/dev目录中自动生成相应的设备文件。命令执行前,需要先挂载内核的proc和sysfs虚拟文件系统。
十二、初始身手
解决了自动生成设备文件的问题后,我们可以试着做一个最简单的可运行的linux系统了:
(1)在image目录下写一个最简单的init脚本。
#!/bin/sh
mount -t proc proc /proc
mount -t sysfs sysfs /sys
mdev -s
/bin/sh
(2)为init脚本设置可执行权限,否则内核不会去执行它。
chmod +x init
(3)有些busybox配置中,mdev命令需要读取/etc/mdev.conf文件,为了避免出错信息,我们创建一个空文件。mdev.conf文件是用来控制mdev生成的设备文件的读写权限的,在这里我们不需要对设备文件设置特别的权限,就使用mdev缺省的660的权限设置。有关mdev的设备文件权限的控制详细信息,可参考busybox源码树docs目录下的mdev.txt文件。
touch etc/mdev.conf
(4)在内核源码目录下,执行
make
命令,重新编译内核,生成新的init ramfs。
好了,在QEMU模拟环境下启动这个新的内核,系统初始化后,会进入SHELL环境。在这个SHELL环境下,试验一些常用命令,看看是否可以正常运行。