kernfs: remove static node creation, and update the text

This is to match the "new" way of device handling with devtmpfs (already
widely used in recent ten years).

In a normal booting process, the kernel mounts devtmpfs at very early
stage.  So the static nodes won't be used at all.  The only situation
where the kernel can't mount devtmpfs is "/dev is missing", but it means
those two static nodes can't exist anyway, and a normal LFS system
(without initramfs) won't boot in such a bad situation.

Removing static /dev/console and /dev/null may cause trouble for those
people or scripts chroot into LFS tree without mounting devtmpfs.  But
entering a chroot with only console and null in /dev is already
problematic.  For a reference, If a systemd service is started with
PrivateDevices=true, systemd will create 18 nodes and symlinks to form a
"minimal" /dev.
This commit is contained in:
Xi Ruoyao 2022-03-08 01:19:06 +08:00
parent 102a7f64c0
commit 940c8495ae
No known key found for this signature in database
GPG Key ID: D95E4716CCBB34DC

View File

@ -24,41 +24,22 @@
<screen><userinput>mkdir -pv $LFS/{dev,proc,sys,run}</userinput></screen>
<sect2>
<title>Creating Initial Device Nodes</title>
<para>When the kernel boots the system, it requires the presence of a few
device nodes, in particular the <filename
class="devicefile">console</filename> and <filename
class="devicefile">null</filename> devices. The device nodes must be
created on the hard disk so that they are available before the kernel
populates <systemitem class="filesystem">/dev</systemitem>), and
additionally when Linux is started with
<parameter>init=/bin/bash</parameter>. Create the devices by running the
following commands:</para>
<screen><userinput>mknod -m 600 $LFS/dev/console c 5 1
mknod -m 666 $LFS/dev/null c 1 3</userinput></screen>
</sect2>
<sect2 id="ch-tools-bindmount">
<title>Mounting and Populating /dev</title>
<para>The recommended method of populating the <filename
class="directory">/dev</filename> directory with devices is to mount a
virtual filesystem (such as <systemitem
class="filesystem">tmpfs</systemitem>) on the <filename
class="directory">/dev</filename> directory, and allow the devices to be
created dynamically on that virtual filesystem as they are detected or
accessed. Device creation is generally done during the boot process
by Udev. Since this new system does not yet have Udev and has not yet
been booted, it is necessary to mount and populate <filename
class="directory">/dev</filename> manually. This is accomplished by bind
mounting the host system's <filename class="directory">/dev</filename>
directory. A bind mount is a special type of mount that allows you to
create a mirror of a directory or mount point to some other location. Use
the following command to achieve this:</para>
<para>During a normal boot, the kernel automatically mounts the
<systemitem class="filesystem">devtmpfs</systemitem> filesystem on the
<filename class="directory">/dev</filename> directory, and allow the
devices to be created dynamically on that virtual filesystem as they
are detected or accessed. Device creation is generally done during the
boot process by Udev. Since this new system does not yet have Udev and
has not yet been booted, it is necessary to mount and populate
<filename class="directory">/dev</filename> manually. This is
accomplished by bind mounting the host system's
<filename class="directory">/dev</filename> directory. A bind mount is
a special type of mount that allows you to create a mirror of a
directory or mount point to some other location. Use the following
command to achieve this:</para>
<screen><userinput>mount -v --bind /dev $LFS/dev</userinput></screen>