source: chapter09/symlinks.xml@ c75f261

xry111/mips64el
Last change on this file since c75f261 was c75f261, checked in by Xi Ruoyao <xry111@…>, 7 months ago

mips64el: remove grub and add a note about bootloader

There are many MIPS boards and grub only supports three kind of them:
arc, loongson, qemu. And for loongson and qemu, grub requires
freetype2. Just remove it in the mips64el branch.

  • Property mode set to 100644
File size: 13.2 KB
RevLine 
[7152faa]1<?xml version="1.0" encoding="UTF-8"?>
[b06ca36]2<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
3 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
[966b175]4 <!ENTITY % general-entities SYSTEM "../general.ent">
5 %general-entities;
6]>
7
[afcfd74]8<sect1 id="ch-config-symlinks">
[966b175]9 <?dbhtml filename="symlinks.html"?>
10
[bf58c1e]11 <title>Managing Devices</title>
12
[efd5d1f]13 <sect2 revision="sysv">
[bf58c1e]14
15 <title>Network Devices</title>
16
17 <para>Udev, by default, names network devices according to Firmware/BIOS
18 data or physical characteristics like the bus, slot, or MAC address. The
19 purpose of this naming convention is to ensure that network devices are
[8972a36]20 named consistently, not based on when the network card was
21 discovered. In older versions of Linux&mdash;on a computer with two
22 network cards made by Intel and Realtek, for instance&mdash;the
23 network card manufactured by Intel might have become eth0
24 while the Realtek card became eth1. After a reboot, the cards
25 would sometimes get renumbered the other way around.</para>
26
27 <para>In the new naming scheme, typical network device names are
28 something like enp5s0 or wlp3s0. If this naming convention is not
29 desired, the traditional naming scheme, or a custom scheme, can be
[bf58c1e]30 implemented.</para>
31
32 <sect3>
33 <title>Disabling Persistent Naming on the Kernel Command Line</title>
[c34b4fb]34
[8972a36]35 <para>The traditional naming scheme using eth0, eth1, etc. can be
[c34b4fb]36 restored by adding <userinput>net.ifnames=0</userinput> on the
[8972a36]37 kernel command line. This is most appropriate for systems
38 that have just one ethernet device of a particular type. Laptops
39 often have two ethernet connections named eth0 and
[c75f261]40 wlan0; such laptops can also use this method.</para>
[bf58c1e]41 </sect3>
42
43 <sect3>
44 <title>Creating Custom Udev Rules</title>
[c34b4fb]45
[a3d0817]46 <para>The naming scheme can be customized by creating custom udev
[bf58c1e]47 rules. A script has been included that generates the initial rules.
48 Generate these rules by running:</para>
49
[d7a9421]50<screen role="install"><userinput>bash /usr/lib/udev/init-net-rules.sh</userinput></screen>
[bf58c1e]51
[8aa7fde]52 <para> Now, inspect the
[bf58c1e]53 <filename>/etc/udev/rules.d/70-persistent-net.rules</filename> file, to
54 find out which name was assigned to which network device:</para>
55
56<screen role="nodump"><userinput>cat /etc/udev/rules.d/70-persistent-net.rules</userinput></screen>
57
[8972a36]58 <note><para>In some cases, such as when MAC addresses have been assigned to
59 a network card manually, or in a virtual environment such as Qemu or Xen,
60 the network rules file may not be generated because addresses
[bf58c1e]61 are not consistently assigned. In these cases, this method cannot
62 be used.</para></note>
[c34b4fb]63
[8972a36]64 <para>The file begins with a comment block, followed by two lines for each
[bf58c1e]65 NIC. The first line for each NIC is a commented description showing its
66 hardware IDs (e.g. its PCI vendor and device IDs, if it's a PCI card),
[8972a36]67 along with its driver (in parentheses, if the driver can be found). Neither
[bf58c1e]68 the hardware ID nor the driver is used to determine which name to give an
69 interface; this information is only for reference. The second line is the
[a3d0817]70 udev rule that matches this NIC and actually assigns it a name.</para>
[c34b4fb]71
[8972a36]72 <para>All udev rules are made up of several keywords, separated by commas and
73 optional whitespace. Here are the keywords, and an explanation of each one:</para>
[c34b4fb]74
[bf58c1e]75 <itemizedlist>
76 <listitem>
[a3d0817]77 <para><literal>SUBSYSTEM=="net"</literal> - This tells udev to ignore
[bf58c1e]78 devices that are not network cards.</para>
79 </listitem>
80 <listitem>
[a3d0817]81 <para><literal>ACTION=="add"</literal> - This tells udev to ignore this
[bf58c1e]82 rule for a uevent that isn't an add ("remove" and "change" uevents also
83 happen, but don't need to rename network interfaces).</para>
84 </listitem>
85 <listitem>
[a3d0817]86 <para><literal>DRIVERS=="?*"</literal> - This exists so that udev will
[bf58c1e]87 ignore VLAN or bridge sub-interfaces (because these sub-interfaces do
88 not have drivers). These sub-interfaces are skipped because the name
[8972a36]89 that would be assigned would collide with the parent devices.</para>
[bf58c1e]90 </listitem>
91 <listitem>
[8972a36]92 <para><literal>ATTR{address}</literal> - The value of this keyword is the
[bf58c1e]93 NIC's MAC address.</para>
94 </listitem>
95 <listitem>
96 <para><literal>ATTR{type}=="1"</literal> - This ensures the rule only
[a3d0817]97 matches the primary interface in the case of certain wireless drivers
[bf58c1e]98 which create multiple virtual interfaces. The secondary interfaces are
99 skipped for the same reason that VLAN and bridge sub-interfaces are
100 skipped: there would be a name collision otherwise.</para>
101 </listitem>
102 <listitem>
[8972a36]103 <para><literal>NAME</literal> - The value of this keyword is the name that
[a3d0817]104 udev will assign to this interface.</para>
[bf58c1e]105 </listitem>
106 </itemizedlist>
[c34b4fb]107
[bf58c1e]108 <para>The value of <literal>NAME</literal> is the important part. Make sure
109 you know which name has been assigned to each of your network cards before
110 proceeding, and be sure to use that <literal>NAME</literal> value when
[8972a36]111 creating your network configuration files.</para>
[bf58c1e]112
[3608380f]113 <para>Even if the custom udev rule file is created, udev may still
114 assign one or more alternative names for a NIC based on physical
[eea548f]115 characteristics. If a custom udev rule would rename some NIC using
[3608380f]116 a name already assigned as an alternative name of another NIC, this
117 udev rule will fail. If this issue happens, you may create the
118 <filename>/etc/udev/network/99-default.link</filename> configuration
119 file with an empty alternative assignment policy, overriding the
120 default configuration file
121 <filename>/usr/lib/udev/network/99-default.link</filename>:</para>
122
123<screen role="nodump"><userinput>sed -e '/^AlternativeNamesPolicy/s/=.*$/=/' \
124 -i /usr/lib/udev/network/99-default.link \
125 > /etc/udev/network/99-default.link</userinput></screen>
[bf58c1e]126 </sect3>
127
128 </sect2>
[966b175]129
[efd5d1f]130 <sect2 revision="sysv">
[966b175]131
[8972a36]132 <title>CD-ROM Symlinks</title>
[966b175]133
134 <para>Some software that you may want to install later (e.g., various
[8972a36]135 media players) expects the <filename class="symlink">/dev/cdrom</filename>
[84dbfdac]136 and <filename class="symlink">/dev/dvd</filename> symlinks to exist, and
137 to point to a CD-ROM or DVD-ROM device. Also, it may be convenient to put
138 references to those symlinks into <filename>/etc/fstab</filename>. Udev
139 comes with a script that will generate rules files to create these symlinks
140 for you, depending on the capabilities of each device, but you need to
141 decide which of two modes of operation you wish to have the script use.</para>
142
[8536c02]143 <para>First, the script can operate in <quote>by-path</quote> mode (used by
144 default for USB and FireWire devices), where the rules it creates depend on
145 the physical path to the CD or DVD device. Second, it can operate in
146 <quote>by-id</quote> mode (default for IDE and SCSI devices), where the
[a3d0817]147 rules it creates depend on identification strings stored on the CD or DVD
148 device itself. The path is determined by udev's <command>path_id</command>
[8536c02]149 script, and the identification strings are read from the hardware by its
[84dbfdac]150 <command>ata_id</command> or <command>scsi_id</command> programs, depending
151 on which type of device you have.</para>
152
[8972a36]153 <para>There are advantages to each approach; the correct approach
154 depends on what kinds of device changes may happen. If you expect the
[84dbfdac]155 physical path to the device (that is, the ports and/or slots that it plugs
156 into) to change, for example because you plan on moving the drive to a
157 different IDE port or a different USB connector, then you should use the
158 <quote>by-id</quote> mode. On the other hand, if you expect the device's
[8972a36]159 identification to change, for example because it may die, and you intend
160 to replace it with a different device that
161 plugs into the same connectors, then you should use the
[84dbfdac]162 <quote>by-path</quote> mode.</para>
163
164 <para>If either type of change is possible with your drive, then choose a
165 mode based on the type of change you expect to happen more often.</para>
166
167<!-- If you use by-id mode, the symlinks will survive even the transition
168 to libata for IDE drives, but that is not for the book. -->
169
[80640a49]170 <important><para>External devices (for example, a USB-connected CD drive)
171 should not use by-path persistence, because each time the device is plugged
172 into a new external port, its physical path will change. All
[a3d0817]173 externally-connected devices will have this problem if you write udev rules
[80640a49]174 to recognize them by their physical path; the problem is not limited to CD
175 and DVD drives.</para></important>
[84dbfdac]176
[a3d0817]177 <para>If you wish to see the values that the udev scripts will use, then
[84dbfdac]178 for the appropriate CD-ROM device, find the corresponding directory under
[966b175]179 <filename class="directory">/sys</filename> (e.g., this can be
180 <filename class="directory">/sys/block/hdd</filename>) and
181 run a command similar to the following:</para>
182
[61e63d3]183<screen role="nodump"><userinput>udevadm test /sys/block/hdd</userinput></screen>
[84dbfdac]184
185 <para>Look at the lines containing the output of various *_id programs.
186 The <quote>by-id</quote> mode will use the ID_SERIAL value if it exists and
187 is not empty, otherwise it will use a combination of ID_MODEL and
188 ID_REVISION. The <quote>by-path</quote> mode will use the ID_PATH value.</para>
189
[8536c02]190 <para>If the default mode is not suitable for your situation, then the
191 following modification can be made to the
[0a28f5f4]192 <filename>/etc/udev/rules.d/83-cdrom-symlinks.rules</filename> file,
[8536c02]193 as follows (where <replaceable>mode</replaceable> is one of
194 <quote>by-id</quote> or <quote>by-path</quote>):</para>
[84dbfdac]195
[a3d0817]196<screen role="nodump"><userinput>sed -e 's/"write_cd_rules"/"write_cd_rules <replaceable>mode</replaceable>"/' \
197 -i /etc/udev/rules.d/83-cdrom-symlinks.rules</userinput></screen>
[966b175]198
[84dbfdac]199 <para>Note that it is not necessary to create the rules files or symlinks
[a3d0817]200 at this time because you have bind-mounted the host's
201 <filename class="directory">/dev</filename> directory into the LFS system
[651719a]202 and we assume the symlinks exist on the host. The rules and symlinks will
203 be created the first time you boot your LFS system.</para>
[a3b689f]204
[651719a]205 <para>However, if you have multiple CD-ROM devices, then the symlinks
206 generated at that time may point to different devices than they point to on
[a3d0817]207 your host because devices are not discovered in a predictable order. The
[651719a]208 assignments created when you first boot the LFS system will be stable, so
209 this is only an issue if you need the symlinks on both systems to point to
210 the same device. If you need that, then inspect (and possibly edit) the
211 generated <filename>/etc/udev/rules.d/70-persistent-cd.rules</filename>
[8972a36]212 file after booting, to make sure the assigned symlinks match your needs.</para>
[966b175]213
214 </sect2>
215
216 <sect2>
217
[8972a36]218 <title>Dealing with Duplicate Devices</title>
[966b175]219
[afcfd74]220 <para>As explained in <xref linkend="ch-config-udev"/>, the order in
[966b175]221 which devices with the same function appear in
222 <filename class="directory">/dev</filename> is essentially random.
223 E.g., if you have a USB web camera and a TV tuner, sometimes
224 <filename>/dev/video0</filename> refers to the camera and
225 <filename>/dev/video1</filename> refers to the tuner, and sometimes
[a3d0817]226 after a reboot the order changes.
[966b175]227 For all classes of hardware except sound cards and network cards, this is
[8972a36]228 fixable by creating udev rules to create persistent symlinks.
[966b175]229 The case of network cards is covered separately in
[afcfd74]230 <xref linkend="ch-config-network"/>, and sound card configuration can
[0ee07e5]231 be found in <ulink url="&blfs-book;postlfs/devices.html">BLFS</ulink>.</para>
[966b175]232
233 <para>For each of your devices that is likely to have this problem
234 (even if the problem doesn't exist in your current Linux distribution),
235 find the corresponding directory under
236 <filename class="directory">/sys/class</filename> or
237 <filename class="directory">/sys/block</filename>.
238 For video devices, this may be
239 <filename
240 class="directory">/sys/class/video4linux/video<replaceable>X</replaceable></filename>.
241 Figure out the attributes that identify the device uniquely (usually,
242 vendor and product IDs and/or serial numbers work):</para>
243
[61e63d3]244<screen role="nodump"><userinput>udevadm info -a -p /sys/class/video4linux/video0</userinput></screen>
[966b175]245
246 <para>Then write rules that create the symlinks, e.g.:</para>
247
[8857ace2]248<screen role="nodump"><userinput>cat &gt; /etc/udev/rules.d/83-duplicate_devs.rules &lt;&lt; "EOF"
[966b175]249<literal>
250# Persistent symlinks for webcam and tuner
[a3d0817]251KERNEL=="video*", ATTRS{idProduct}=="1910", ATTRS{idVendor}=="0d81", SYMLINK+="webcam"
252KERNEL=="video*", ATTRS{device}=="0x036f", ATTRS{vendor}=="0x109e", SYMLINK+="tvtuner"
[966b175]253</literal>
254EOF</userinput></screen>
255
256 <para>The result is that <filename>/dev/video0</filename> and
257 <filename>/dev/video1</filename> devices still refer randomly to the tuner
258 and the web camera (and thus should never be used directly), but there are
259 symlinks <filename>/dev/tvtuner</filename> and
260 <filename>/dev/webcam</filename> that always point to the correct
261 device.</para>
262
263 </sect2>
264
265</sect1>
Note: See TracBrowser for help on using the repository browser.