6.8. 在 /dev 中创建设备

6.8.1. 创建初始设备节点

内核在引导时要求某些设备节点必须存在(特别是 consolenull ),这些设备节点必须创建在硬盘上才能使得内核在 udev 尚未启动之前就可以使用它们,特别是当系统以单用户模式启动(仅允许使用 console)的时候更是如此。使用下面的命令来创建这些节点:

mknod -m 600 /dev/console c 5 1
mknod -m 666 /dev/null c 1 3

6.8.2. 挂载 ramfs 并填充 /dev 目录

推荐的向 /dev 目录填充设备的方法是在 /dev 上挂载一个虚拟文件系统(比如 tmpfs),然后在设备被检测到或被访问到的时候(通常是在系统引导的过程中)动态创建设备节点。既然现在新的系统尚未被引导,那么就有必要通过挂载 /dev 来手工完成 LFS-Bootscripts 将来要做的事情:

mount -nvt tmpfs none /dev

Udev 软件包是实际用于在 /dev 目录中添加设备的工具。但是由于它要在后面的步骤中才被安装,我们现在必须手动创建一个必需的设备文件的最小集合,以便继续构建我们的系统。[注意]前面创建的 console 和 null 设备文件(保存在硬盘上)被新挂载的 tmpfs 文件系统隐藏了,所以这里还要再创建一次。

mknod -m 622 /dev/console c 5 1
mknod -m 666 /dev/null c 1 3
mknod -m 666 /dev/zero c 1 5
mknod -m 666 /dev/ptmx c 5 2
mknod -m 666 /dev/tty c 5 0
mknod -m 444 /dev/random c 1 8
mknod -m 444 /dev/urandom c 1 9
chown -v root:tty /dev/{console,ptmx,tty}

有一些在系统启动的时候由 LFS-Bootscripts 创建的符号连接和目录是 LFS 系统所必须的。既然目前只是 chroot 后的环境而不是真实启动后的环境,那么就需要在这里先创建他们:

ln -sv /proc/self/fd /dev/fd
ln -sv /proc/self/fd/0 /dev/stdin
ln -sv /proc/self/fd/1 /dev/stdout
ln -sv /proc/self/fd/2 /dev/stderr
ln -sv /proc/kcore /dev/core
mkdir -v /dev/pts
mkdir -v /dev/shm

最后在新建的目录中挂载虚拟内核文件系统:

mount -vt devpts -o gid=4,mode=620 none /dev/pts
mount -vt tmpfs none /dev/shm

上面的 mount 命令可能会导致下面的警告信息:

can't open /etc/fstab: No such file or directory.

因为在挂载文件系统时需要 /etc/fstab 文件的指示,但是该文件目前尚未被创建,不过你可以安全的忽略它,该文件系统仍然会被正确的挂载。