内核导出了多个文件系统,用于与外界交流。这些文件系统是虚拟的,并不占用硬盘空间。它们的内容位于内存中。
首先创建用来挂载这些文件系统的目录:
mkdir -pv $LFS/{dev,proc,sys,run}
当内核引导系统的时候,需要有几个设备节点存在,尤其是 console
和
null
设备。这些设备节点必须创建在硬盘上,这样它们就能在
udevd 启动之前或者以
init=/bin/bash
参数启动 linux
的时候可用。运行以下指令创建这些设备:
mknod -m 600 $LFS/dev/console c 5 1 mknod -m 666 $LFS/dev/null c 1 3
要将设备填充到 /dev
目录中,推荐的方法是挂载一个虚拟文件系统 (比如
tmpfs
) 于 /dev
目录中,并允许设备在被检测和访问的时候动态创建于其中。设备创建在引导过程中会由 Udev
总体完成。因为这个新系统还没有 Udev 也没有被引导,手动挂载并填充 /dev
就非常重要。通过捆绑挂载宿主系统的 /dev
目录来完成这一任务。捆绑挂载是一种特殊的挂载形式,允许你在其他位置创建一个目录或者挂载点的镜像。运行以下命令实现之:
mount -v --bind /dev $LFS/dev
现在挂载虚拟内核文件系统:
mount -vt devpts devpts $LFS/dev/pts -o gid=5,mode=620 mount -vt proc proc $LFS/proc mount -vt sysfs sysfs $LFS/sys mount -vt tmpfs tmpfs $LFS/run
devpts 挂载选项的含义:
gid=5
此项确保所有 devpts 创建的设备节点都为组 ID 5 所有。这是我们后面将要为 tty
组使用的 ID。我们使用组 ID 而不是使用名字,是因为宿主系统的
tty
组可能是不同的 ID。
mode=0620
此项确保所有 devpts 创建的设备节点的 mode 都是 0620(用户可读可写,组可写)。和上面的选项一起,确保 devpts 会创建满足 grantpt() 需求的设备节点。这意味着 Glibc 的辅助二进制文件 pt_chown(它默认不被安装)不是必需的了。
在某些宿主系统上,/dev/shm
是到/run/shm
的符号链接。/run tmpfs 在前面被挂载,这样这里只需创建一个目录。
if [ -h $LFS/dev/shm ]; then mkdir -pv $LFS/$(readlink $LFS/dev/shm) fi