aboutsummaryrefslogtreecommitdiffstats
path: root/chapter06/devices.xml
blob: e094f1528c4de8b3d4672e9e84a913428471a1ee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
  <!ENTITY % general-entities SYSTEM "../general.ent">
  %general-entities;
]>
<sect1 id="ch-system-devices">
<title>Populating /dev</title>
<?dbhtml filename="devices.html"?>

<indexterm zone="ch-system-devices"><primary sortas="e-/dev/">/dev/*</primary></indexterm>

<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. Create these by
running the following commands:</para>

<screen><userinput>mknod -m 600 /dev/console c 5 1
mknod -m 666 /dev/null c 1 3</userinput></screen>
</sect2>

<sect2>
<title>Mounting tmpfs 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. This is generally done during the boot process. Since this new system
has not been booted, it is necessary to do what the bootscripts would otherwise
do by mounting <filename class="directory">/dev</filename>:</para>

<screen><userinput>mount -n -t tmpfs none /dev</userinput></screen>

<para>The Udev package is what actually creates the devices in the <filename
class="directory">/dev</filename> directory. Since it will not be installed
until later on in the process, manually create the minimal set of device nodes
needed to complete the building of this system:</para>

<screen><userinput>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}</userinput></screen>
<!-- -->

<para>There are some symlinks and directories required by LFS that are created
during system startup by the bootscripts. Since this is a chroot environment and
not a booted environment, those symlinks and directories need to be created
here:</para>

<screen><userinput>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</userinput></screen>

<para>Finally, mount the proper virtual (kernel) file systems on the
newly-created directories:</para>

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

<para>The <command>mount</command> commands executed above may result
in the following warning message:</para>

<screen><computeroutput>can't open /etc/fstab: No such file or directory.</computeroutput></screen>

<para>This file&mdash;<filename>/etc/fstab</filename>&mdash;has not
been created yet but is also not required for the file systems to be
properly mounted. As such, the warning can be safely ignored.</para>
</sect2>

</sect1>