source: chapter07/symlinks.xml@ 966b175

10.0 10.0-rc1 10.1 10.1-rc1 11.0 11.0-rc1 11.0-rc2 11.0-rc3 11.1 11.1-rc1 11.2 11.2-rc1 11.3 11.3-rc1 12.0 12.0-rc1 12.1 12.1-rc1 6.3 6.4 6.5 6.6 6.7 6.8 7.0 7.1 7.2 7.3 7.4 7.5 7.5-systemd 7.6 7.6-systemd 7.7 7.7-systemd 7.8 7.8-systemd 7.9 7.9-systemd 8.0 8.1 8.2 8.3 8.4 9.0 9.1 arm bdubbs/gcc13 ml-11.0 multilib renodr/libudev-from-systemd s6-init trunk xry111/arm64 xry111/arm64-12.0 xry111/clfs-ng xry111/lfs-next xry111/loongarch xry111/loongarch-12.0 xry111/loongarch-12.1 xry111/mips64el xry111/pip3 xry111/rust-wip-20221008 xry111/update-glibc
Last change on this file since 966b175 was 966b175, checked in by Dan Nichilson <dnicholson@…>, 18 years ago

Various fixes and additions for examples of custom rules in Udev courtesy
of Alexander Patrakov. Includes guidelines for persistent CD-ROM symlinks.

git-svn-id: http://svn.linuxfromscratch.org/LFS/trunk/BOOK@7661 4aa44e1e-78dd-0310-a6d2-fbcd4c07a689

  • Property mode set to 100644
File size: 5.6 KB
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
3 "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
4 <!ENTITY % general-entities SYSTEM "../general.ent">
5 %general-entities;
6]>
7
8<sect1 id="ch-scripts-symlinks">
9 <?dbhtml filename="symlinks.html"?>
10
11 <title>Creating custom symlinks to devices</title>
12
13 <sect2>
14
15 <title>CD-ROM symlinks</title>
16
17 <para>Some software that you may want to install later (e.g., various
18 media players) expect the /dev/cdrom and /dev/dvd symlinks to exist.
19 Also, it may be convenient to put references to those symlinks into
20 <filename>/etc/fstab</filename>. For each of your CD-ROM devices,
21 find the corresponding directory under
22 <filename class="directory">/sys</filename> (e.g., this can be
23 <filename class="directory">/sys/block/hdd</filename>) and
24 run a command similar to the following:</para>
25
26<screen role="nodump"><userinput>udevtest /block/hdd</userinput></screen>
27
28 <para>Look at the lines containing the output of various *_id programs.</para>
29
30 <para>There are two approaches to creating symlinks. The first one is to
31 use the model name and the serial number, the second one is based on the
32 location of the device on the bus. If you are going to use the first
33 approach, create a file similar to the following:</para>
34
35<screen role="nodump"><userinput>cat &gt;/etc/udev/rules.d/82-cdrom.rules &lt;&lt;"EOF"
36<literal>
37# Custom CD-ROM symlinks
38SUBSYSTEM=="block", ENV{ID_MODEL}=="SAMSUNG_CD-ROM_SC-148F", ENV{ID_REVISION}=="PS05", SYMLINK+="cdrom"
39SUBSYSTEM=="block", ENV{ID_MODEL}=="PHILIPS_CDD5301", ENV{ID_SERIAL}=="5VO1306DM00190", SYMLINK+="cdrom1 dvd"
40</literal>
41EOF</userinput></screen>
42
43 <para>This way, the symlinks will stay correct even if you move the drives
44 to different positions on the IDE bus, but the
45 <filename>/dev/cdrom</filename> symlink won't be created if you replace
46 the old SAMSUNG CD-ROM with a new drive.</para>
47<!-- The symlinks in the first approach survive even the transition
48 to libata for IDE drives, but that is not for the book. -->
49
50 <para>The SUBSYSTEM==&quot;block&quot; key is needed in order to avoid
51 matching SCSI generic devices. Without it, in the case with SCSI
52 CD-ROMs, the symlinks will sometimes point to the correct
53 <filename>/dev/srX</filename> devices, and sometimes to
54 <filename>/dev/sgX</filename>, which is wrong.</para>
55
56 <para>The second approach yields:</para>
57
58<screen role="nodump"><userinput>cat &gt;/etc/udev/rules.d/82-cdrom.rules &lt;&lt;"EOF"
59<literal>
60# Custom CD-ROM symlinks
61SUBSYSTEM=="block", ENV{ID_TYPE}=="cd", ENV{ID_PATH}=="pci-0000:00:07.1-ide-0:1", SYMLINK+="cdrom"
62SUBSYSTEM=="block", ENV{ID_TYPE}=="cd", ENV{ID_PATH}=="pci-0000:00:07.1-ide-1:1", SYMLINK+="cdrom1 dvd"
63</literal>
64EOF</userinput></screen>
65
66 <para>This way, the symlinks will stay correct even if you replace drives
67 with different models, but place them to the old positions on the IDE
68 bus. The ENV{ID_TYPE}==&quot;cd&quot; key makes sure that the symlink
69 disappears if you put something other than a CD-ROM in that position on
70 the bus.</para>
71
72 <para>Of course, it is possible to mix the two approaches.</para>
73
74 </sect2>
75
76 <sect2>
77
78 <title>Dealing with duplicate devices</title>
79
80 <para>As explained in <xref linkend="ch-scripts-udev"/>, the order in
81 which devices with the same function appear in
82 <filename class="directory">/dev</filename> is essentially random.
83 E.g., if you have a USB web camera and a TV tuner, sometimes
84 <filename>/dev/video0</filename> refers to the camera and
85 <filename>/dev/video1</filename> refers to the tuner, and sometimes
86 after a reboot the order changes to the opposite one.
87 For all classes of hardware except sound cards and network cards, this is
88 fixable by creating udev rules for custom persistent symlinks.
89 The case of network cards is covered separately in
90 <xref linkend="ch-scripts-network"/>, and sound card configuration can
91 be found in <ulink url="&blfs-root;">BLFS</ulink>.</para>
92
93 <para>For each of your devices that is likely to have this problem
94 (even if the problem doesn't exist in your current Linux distribution),
95 find the corresponding directory under
96 <filename class="directory">/sys/class</filename> or
97 <filename class="directory">/sys/block</filename>.
98 For video devices, this may be
99 <filename
100 class="directory">/sys/class/video4linux/video<replaceable>X</replaceable></filename>.
101 Figure out the attributes that identify the device uniquely (usually,
102 vendor and product IDs and/or serial numbers work):</para>
103
104<screen role="nodump"><userinput>udevinfo -a -p /sys/class/video4linux/video0</userinput></screen>
105
106 <para>Then write rules that create the symlinks, e.g.:</para>
107
108<screen role="nodump"><userinput>cat &gt;/etc/udev/rules.d/83-duplicate_devs.rules &lt;&lt;"EOF"
109<literal>
110# Persistent symlinks for webcam and tuner
111KERNEL=="video*", SYSFS{idProduct}=="1910", SYSFS{idVendor}=="0d81", SYMLINK+="webcam"
112KERNEL=="video*", SYSFS{device}=="0x036f", SYSFS{vendor}=="0x109e", SYMLINK+="tvtuner"
113</literal>
114EOF</userinput></screen>
115
116 <para>The result is that <filename>/dev/video0</filename> and
117 <filename>/dev/video1</filename> devices still refer randomly to the tuner
118 and the web camera (and thus should never be used directly), but there are
119 symlinks <filename>/dev/tvtuner</filename> and
120 <filename>/dev/webcam</filename> that always point to the correct
121 device.</para>
122
123 <para>More information on writing Udev rules can be found in
124 <filename>/usr/share/doc/udev-&udev-version;/index.html</filename>.</para>
125
126 </sect2>
127
128</sect1>
Note: See TracBrowser for help on using the repository browser.