内核会挂载几个文件系统用于自己和用户空间程序交换信息。这些文件系统是虚拟的,并不占用实际磁盘空间,它们的内容会放在内存里。
开始先创建将用来挂载文件系统的目录:
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
目录下设备的方式是在 /dev
目录挂载一个虚拟文件系统(比如 tmpfs
),然后允许在检测到设备或打开设备时在这个虚拟文件系统里动态创建设备节点。这个通常是在启动过程中由
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 创建的设备节点属于 GID 5 之下。这个 ID 日后将用于 tty
组。我们使用 GID 来代替组名,原因是宿主系统可能为
tty
组使用其他的 ID。
mode=0620
以确保所有 devpts 创建的设备节点的属性为 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