6.8. 在 /dev 中创建设备

6.8.1. 创建初始设备节点

内核在引导时要求某些设备节点必须存在(特别是 consolenull ),我们来创建它:

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 将来要做的事情。先将 tmpfs 挂载到 /dev

mount -n -t 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 root:tty /dev/{console,ptmx,tty}

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

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

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

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

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

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

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