aboutsummaryrefslogtreecommitdiffstats
path: root/chapter06/makedev.xml
blob: 271ebef8095d1e082e77fc1c47fd42cc55f2f60e (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
84
85
86
87
88
89
90
91
92
93
94
<sect1 id="ch-system-MAKEDEV" xreflabel="Make_devices">
<title>Creating devices with Make_devices-&makedev-version;</title>
<?dbhtml filename="makedevices.html" dir="chapter06"?>

<para>The Make_devices package contains a script for creating device
nodes.</para>

<screen>&buildtime; &makedev-time;
&diskspace; &makedev-compsize;</screen>

&aa-makedev-down;
&aa-makedev-dep;

<sect2><title>&nbsp;</title><para>&nbsp;</para></sect2>

<sect2>
<title>Making devices</title>

<para>Note that unpacking the
<filename>make_devices-&makedev-version;.bz2</filename> file doesn't
create a directory for you to <command>cd</command> into, as the file
contains only a shell script.</para>

<para>Install the <filename>make_devices</filename> script:</para>

<screen><userinput>bzcat make_devices-&makedev-version;.bz2 &gt; /dev/make_devices
chmod 754 /dev/make_devices</userinput></screen>

<para>Device nodes are special files: things that can generate or receive data.
They usually correspond to physical pieces of hardware. Device nodes can be
created by issuing commands of the form: <command>mknod -m mode name type major
minor</command>. In such a command, <emphasis>mode</emphasis> is the usual
octal read/write/execute permissions triplet, and <emphasis>name</emphasis> is
the name of the device file to be created. It may seem surprising, but the
device name is actually arbitrary, except that most programs rely on devices
such as <filename>/dev/null</filename> having their usual names. The remaining
three parameters tell the kernel what device the node
actually refers to. The <emphasis>type</emphasis> is a letter, either b or c,
indicating whether the device is accessed in blocks (such as a hard disk) or
character by character (such as the console). And <emphasis>major</emphasis>
and <emphasis>minor</emphasis> are numbers, together forming a code that
identifies the device to the kernel. A list of the currently assigned device
numbers for Linux can be found in the file <filename>devices.txt</filename> in
the <filename class="directory">Documentation</filename> subdirectory of the
kernel sources.</para>

<para>Note that the same major/minor combination is usually assigned to both a
block and a character device. These are, however, completely unrelated devices
that cannot be interchanged. A device is identified by the type/major/minor
triple, not just the major/minor pair, so when creating a device node it is
important to choose the correct <emphasis>type</emphasis> of device.</para>

<para>Because looking up the type/major/minor triples and using
<command>mknod</command> manually is tedious and error-prone, the
<filename>make_devices</filename> script has been created. It contains a whole
series of <command>mknod</command> commands, one for each device, complete with
recommended name, permissions and group assignment. It has been set up so that
only a minimal set of commonly used devices is enabled and the other lines are
commented out. You should open <filename>make_devices</filename> in an editor
and customize it to your needs. This takes some time, but is very simple. When
you are satisfied, run the script to create the device files:</para>

<screen><userinput>cd /dev
./make_devices</userinput></screen>

<para>If you had success with mounting the devpts file system earlier in <xref
linkend="ch-system-proc"/>, you can continue with the next section. If you were
unable to mount devpts, now is the time to try the alternatives. If your kernel
supports the devfs file system, run the following command to mount
devfs:</para>

<screen><userinput>mount -t devfs devfs /dev</userinput></screen>

<para>This will mount the devfs file system over the top of the new static
<filename>/dev</filename> structure. This poses no problems, as the device
nodes created are still present, they are just hidden by the new devfs file
system.</para>

<para>If that didn't work either, the only option left is to create a few ptyXX
and ttyXX device nodes. To do this, open <filename>make_devices</filename> in
your editor, go to the section "Pseudo-TTY masters" and enable as many ptyXX
devices as you think you will need (every xterm, ssh connection, telnet
connection, and the like, uses one of these pseudo terminals). In the
immediately following section "Pseudo-TTY slaves", enable the corresponding
ttyXX devices. When you are done, rerun <command>./make_devices</command> from
inside <filename>/dev</filename> to have it create the new devices.</para>

</sect2>

&aa-makedev-shortdesc;
&aa-makedev-desc;

</sect1>