7.12. Erzeugen von benutzerdefinierten symbolischen Links zu Geräten

7.12.1. Symbolische Links für CD-ROMs

Einige von den Programmen, die Sie vielleicht später installieren möchten, erwarten die Existenz von /dev/cdrom und /dev/dvd (z. B. einige Media-Player). Außerdem könnte es praktischer sein, diese symbolischen Links in /etc/fstab zu verwenden. Suchen Sie für jedes CD-ROM-Laufwerk den zugehörigen Ordner in /sys (dies könnte /sys/block/hdd sein) und führen Sie ein solches Kommando aus:

udevtest /block/hdd

Halten Sie Ausschau nach den Zeilen mit den verschiedenen *_id-Programmen.

Es gibt zwei Methoden zum Erzeugen symbolischer Links. Die erste Möglichkeit basiert auf dem Modell und der Seriennummer des Geräts, die zweite basiert auf dem Anschluss und dem Bus des Geräts. Wenn Sie die erste Variante einsetzen möchten, erstellen Sie eine Datei wie folgt:

cat >/etc/udev/rules.d/82-cdrom.rules << EOF

# Custom CD-ROM symlinks
SUBSYSTEM=="block", ENV{ID_MODEL}=="SAMSUNG_CD-ROM_SC-148F", \
    ENV{ID_REVISION}=="PS05", SYMLINK+="cdrom"
SUBSYSTEM=="block", ENV{ID_MODEL}=="PHILIPS_CDD5301", \
    ENV{ID_SERIAL}=="5VO1306DM00190", SYMLINK+="cdrom1 dvd"

EOF
[Anmerkung]

Anmerkung

Die Beispiele in diesem Buch funktionieren korrekt. Beachten Sie aber bitte, dass udev den linksgerichteten Schrägstrich nicht als Zeilenfortsetzung interpretiert. Wenn Sie udev-Regeln anpassen, dann muss jede Regel in einer einzigen physikalischen Zeile stehen.

Auf diese Weise bleib der symbolische Link stabil, selbst wenn Sie das Gerät an einem anderen Stecker am IDE-Kabel anschließen. Der Link /dev/cdrom wird allerdings nicht mehr erzeugt, wenn Sie das SAMSUNG-Laufwerk durch ein anderes ersetzen.

Der Schlüssel SUBSYSTEM=="block" ist nötig, um das Erstellen unnötiger generischer SCSI-Geräte zu vermeiden. Ohne ihn würden bei SCSI-CD-ROMs manchmal symbolische Links zu dem richtigen Gerät /dev/srX, aber manchmal auch zu /dev/sgX erzeugt werden (was falsch wäre).

Die zweite Methode sieht so aus:

cat >/etc/udev/rules.d/82-cdrom.rules << EOF

# Custom CD-ROM symlinks
SUBSYSTEM=="block", ENV{ID_TYPE}=="cd", \
    ENV{ID_PATH}=="pci-0000:00:07.1-ide-0:1", SYMLINK+="cdrom"
SUBSYSTEM=="block", ENV{ID_TYPE}=="cd", \
    ENV{ID_PATH}=="pci-0000:00:07.1-ide-1:1", SYMLINK+="cdrom1 dvd"

EOF

Auf diese Weise bleibt der Link stabil, wenn Sie das Laufwerk durch ein anderes ersetzen. Dies funktioniert aber nicht, wenn Sie das Laufwerk an einer anderen Stelle im Bus anschließen. Der Schlüssel ENV{ID_TYPE}=="cd" stellt sicher, dass der symbolische Link verschwindet, wenn Sie etwas anderes als ein CD-ROM an dieser Position im Bus anschließen.

Natürlich können Sie diese beiden Möglichkeiten auch kombinieren.

7.12.2. Der Umgang mit doppelten Geräten

In Abschnitt 7.4, „Umgang mit Geräten und Modulen an einem LFS-System“ wurde ja bereits erwähnt, dass die Reihenfolge, in der Geräte in /dev angelegt werden, vollkommen zufällig sein kann. Nehmen wir an Sie haben eine USB-Webcam und eine USB-TV-Tuner, so zeigt /dev/video0 auf die Kamera und /dev/video1 auf den Tuner. Manchmal kann sich die Reihenfolge bei einem Neustart aber auch einfach umkehren. Dieses Phänomen kann man für alle Geräte außer Sound- und Netzwerkkarten mittels Udev-Regeln und symbolischen Links lösen. Wie man dies mit Netzwerkkarten löst, steht in Abschnitt 7.13, „Einrichten des network-Skripts“ beschrieben, und die Anleitung für Soundkarten finden Sie in BLFS.

Sie sollten für jedes der möglicherweise problematischen Geräte (selbst wenn das Problem mit Ihrer bisherigen Linux-Distribution nicht auftritt) den passenden Ordner unter /sys/class oder /sys/block suchen. Videogeräte finden Sie unter /sys/class/video4linux/videoX. Finden Sie die Attribute, die das Gerät unverwechselbar erkennbar machen (üblicherweise Hersteller- und Produkt-IDs und/oder Seriennummern):

udevinfo -a -p /sys/class/video4linux/video0

Schreiben Sie nun die passenden Regel zum Erzeugen der symbolischen Links:

cat >/etc/udev/rules.d/83-duplicate_devs.rules << EOF

# Persistent symlinks for webcam and tuner
KERNEL=="video*", SYSFS{idProduct}=="1910", SYSFS{idVendor}=="0d81", \
    SYMLINK+="webcam"
KERNEL=="video*", SYSFS{device}=="0x036f", SYSFS{vendor}=="0x109e", \
    SYMLINK+="tvtuner"

EOF

Als Ergebnis erhalten Sie immer noch die Gerätedateien /dev/video0 und /dev/video1, die jeweils unterschiedliche Geräte meinen können (und deshalb nicht direkt angesprochen werden sollten). Zusätzlich erhalten Sie aber auch die symbolischen Links /dev/tvtuner und /dev/webcam, und diese zeigen immer auf das richtige Gerät.

Weitere Informationen zum Schreiben von Udev-Regeln finden Sie in /usr/share/doc/udev-096/index.html.