6.8. 填充 /dev

6.8.1. 创建初始设备节点

当内核启动系统时,它需要一些设备节点的存在,特别是consolenull设备。 设备节点将在硬盘上创建,以便它们在 udev 启动之前可用,并且在 Linux 以单用户模式启动时也可用(因此限制了权限console)。 通过运行以下命令创建设备

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

6.8.2. 挂载 tmpfs 并填充 /dev

填充/dev目录的推荐方法是挂载一个虚拟文件系统(例如tmpfs)在/dev目录上,并允许设备在该虚拟文件系统上动态创建,当它们被检测到或访问时。 这通常在启动过程中完成。 由于这个新系统尚未启动,因此有必要执行 LFS-Bootscripts 包通常通过挂载来执行的操作/dev:

mount -nvt tmpfs none /dev

Udev 包是实际在/dev目录中创建设备的包。 由于它不会在此过程的稍后阶段安装,请手动创建完成此系统构建所需的最小设备节点集

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 需要一些符号链接和目录,这些链接和目录在系统启动期间由 LFS-Bootscripts 包创建。 由于这是一个 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——尚未创建,但也不是文件系统正确挂载所必需的。 因此,可以安全地忽略该警告。