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 der symbolischen Links /dev/cdrom und /dev/dvd und dass diese auf ein CD-Rom- oder DVD-Laufwerk verweisen (z. B. einige Media-Player). Außerdem könnte es praktisch sein, diese symbolischen Links in /etc/fstab einzutragen. Udev enthält ein Skript, welches Regel-Dateien erzeugt, die diese symbolischen Links für Sie anlegen (abhängig von den verfügbaren Funktionen der Geräte). Es gibt zwei Betriebsmodi, in denen die Skripte laufen können. Sie müssen sich entscheiden, welchen der Modi Sie verwenden möchten.

Zum Einen kann das Skript „nach Pfad“ arbeiten (Voreinstellung für USB- und FireWire-Geräte), wobei die erzeugten Regeln abhängig vom physikalischen Pfad zu dem CD- oder DVD-Gerät sind. Außerdem kann das Skript „nach ID“ arbeiten (Voreinstellung für IDE- und SCSI-Geräte), wobei die erzeugten Regeln abhängig sind von Identifikationsmerkmalen, die in den CD-/DVD-Geräten selber gespeichert sind (z. B. Seriennummer). Ein Pfad wird von Udevs Skript path_id ermittelt und ein Identifikationsmerkmal wird aus der Gerätehardware mit den Programmen ata_id bzw. scsi_id ausgelesen, je nach verwendetem Gerät.

Jede Vorgehensweise hat ihre Vorteile; welche Methode Sie am besten verwenden hängt davon ab, welche Geräteänderungen stattfinden können. Fall sich voraussichtlich der physikalische Pfad zu einem Gerät ändern wird (z. B. die Anschlüsse/Steckplätze, an denen es angeschlossen ist), weil Sie ein Gerät an einen anderen IDE-Bus oder USB-Anschluss anschließen möchten, dann sollten Sie die Methode „nach ID“ verwenden. Wenn Sie jedoch damit rechnen müssen, dass sich das Identifikationsmerkmal eines Gerätes ändert und sie es mit einem gleichwertigen Gerät ersetzen möchten, dann sollten Sie die „nach Pfad“-Methode einsetzen.

Wenn beide Arten Geräteänderungen möglich sind, wählen Sie die Methode anhand der wahrscheinlich häufigeren Änderung aus.

[Wichtig]

Wichtig

Externe Geräte (z. B. CD-Rom-Laufwerke über USB) sollten nicht mit Regeln „nach Pfad“ angesteuert werden, weil sich der physikalische Geräte-Pfad mit jedem Anschließen ändert. Dieses Problem besteht mit allen extern angeschlossenen Geräten, die mit Udev über den physikalischen Pfad angesteuert werden; es ist nicht nur auf CD- und DVD-Laufwerke beschränkt.

Wenn Sie sehen möchten, welche Werte die Udev-Skripte verwenden, suchen Sie für Ihr CD-Rom-Laufwerk den zugehörigen Ordner in /sys (dies könnte z. B. /sys/block/hdd sein) und führen Sie dieses Kommando aus:

udevadm test /sys/block/hdd

Sehen Sie sich die Ausgabe der verschiedenen *_id-Programme an. Der Modus „nach ID“ verwendet den Wert ID_SERIAL, sofern er verfügbar und nicht leer ist. Ansonsten wird eine Kombination aus ID_MODEL und ID_REVISION verwendet. Der Modus „nach Pfad“ verwendet den Wert von ID_PATH.

Wenn der Standard-Modus für Ihre Situation unpassend zu sein scheint, können Sie folgende Änderung an der Datei /etc/udev/rules.d/75-cd-aliases-generator.rules vornehmen. Ersetzen Sie mode entsprechend durch „by-id“ oder „by-path“:

sed -i -e 's/write_cd_rules/& mode/' \
    /etc/udev/rules.d/75-cd-aliases-generator.rules

Es ist nicht nötig, die Regel-Dateien oder symbolischen Links jetzt zu erstellen, weil Sie den Ordner /dev per bind in Ihr LFS-System eingebunden haben und wir davon ausgehen, dass die symbolischen Links auf dem Host-System vorhanden sind. Die Regeln und Links werden automatisch erzeugt, wenn Sie Ihr neues System das erste mal neustarten.

Falls Sie allerdings mehrere CD-Rom-Laufwerke haben, können die dann erzeugten symbolischen Links auf andere Geräte verweisen, als es auf Ihrem Host-System der Fall war, weil die Reihenfolge der Geräteerkennung nicht vorhersehbar ist. Die Zuordnung, wie sie beim ersten Neustart von LFS vorgenommen wird, bleibt jedoch stabil, so dass dies nur ein Problem ist, wenn die symbolischen Links des Host-Systems mit denen in Ihrem LFS übereinstimmen sollen (auf die gleichen Geräte zeigen sollen). Falls die Links auf beiden Systemen auf die gleichen Geräte zeigen müssen, untersuchen (und bearbeiten) Sie die Datei /etc/udev/rules.d/70-persistent-cd.rules nach dem Neustart und stellen Sie sicher, dass die symbolischen Links Ihren Vorstellungen entsprechen.

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):

udevadm info -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*", ATTRS{idProduct}=="1910", ATTRS{idVendor}=="0d81", \
    SYMLINK+="webcam"
KERNEL=="video*", ATTRS{device}=="0x036f", ATTRS{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-130/index.html.