Kapitel 33. Dynamische Device Nodes mit udev

Inhaltsverzeichnis

33.1. Grundlagen zum Erstellen von Regeln
33.2. Automatisierung bei NAME und SYMLINK
33.3. Reguläre Ausdrücke in Schlüsseln
33.4. Tipps zur Auswahl geeigneter Schlüssel
33.5. Dauerhafte Namen für Massenspeichergeräte

Zusammenfassung

Mit Linux Kernel 2.6 gibt es eine neue Userspace-Lösung für ein dynamisches Geräteverzeichnis /dev mit konsistenten Gerätebezeichnungen: udev. Es liefert nur Dateien für Geräte, die tatsächlich vorhanden sind. udev erstellt oder entfernt Geräteverknüpfungsdateien, die sich normalerweise im Verzeichnis /dev befinden, und benennt Netzwerkschnittstellen um. Die Vorgänger-Implementierung von /dev mit devfs funktioniert nicht mehr und wird von udev ersetzt.

Traditionell wurden auf Linux-Systemen im Verzeichnis /dev Geräteverknüpfungen (engl. device nodes) gespeichert. Für jede mögliche Art von Gerät gab es eine Verknüpfung, unabhängig davon, ob es im System tatsächlich existierte. Entsprechend groß wurde dieses Verzeichnis. Mit devfs trat eine deutliche Verbesserung ein, denn nur noch real existierende Geräte erhielten einen Device Node in /dev.

udev geht einen neuen Weg bei der Erzeugung der Device Nodes. Es vergleicht Informationen, die sysfs zur Verfügung stellt, mit Angaben des Benutzers in Form von Regeln. sysfs ist ein neues Dateisystem des Kernels 2.6 und stellt die grundlegenden Informationen über angeschlossene Geräte im System zur Verfügung. Es wird unter /sys eingehängt.

Die Erstellung von Regeln durch den Benutzer ist nicht zwingend erforderlich. Wird ein Gerät angeschlossen, wird auch die entsprechende Geräteverknüpfung erzeugt. Allerdings bieten die Regeln die Möglichkeit, die Namen der Verknüpfungen zu ändern. Dies bietet den Komfort, einen kryptischen Gerätenamen durch einen leicht zu merkenden zu ersetzen und darüber hinaus dauerhafte Gerätenamen zu erhalten, wenn man zwei Geräte des gleichen Typs angeschlossen hat.

Zwei Drucker erhalten standardmäßig die Bezeichnungen /dev/lp0 und /dev/lp1. Welches Gerät welchen Device Node erhält hängt allerdings von der Reihenfolge ab, in der sie eingeschaltet werden. Ein weiteres Beispiel sind externe Massenspeichergeräte wie USB-Festplatten. Mit udev lassen sich exakte Geräte-Pfade in /etc/fstab eintragen.

33.1. Grundlagen zum Erstellen von Regeln

Bevor udev Geräteverknüpfungen unter /dev erzeugt, liest es alle Dateien in /etc/udev/rules.d mit der Endung .rules in alphabetischer Reihenfolge ein. Die erste Regel, die zu einem Gerät passt, wird verwendet, auch wenn noch weitere existieren sollten. Kommentare werden mit einem Hash-Zeichen # eingeleitet. Regeln haben die Form:

Schlüssel, [Schlüssel,...] NAME [, SYMLINK]

Mindestens ein Schlüssel muss angegeben werden, da über diesen die Regel einem Gerät zugeordnet wird. Auch der Name ist zwingend erforderlich, denn unter diesem Namen wird die Geräteverknüpfung in /dev angelegt. Der optionale Symlink-Parameter erlaubt es Verknüpfungen an weiteren Stellen anzulegen. Eine Regel für einen Drucker könnte also folgendermaßen aussehen:

BUS="usb", SYSFS{serial}="12345", NAME="lp_hp", SYMLINK="printers/hp"

In diesem Beispiel gibt es zwei Schlüssel: BUS und SYSFS{serial}. udev wird die Seriennummer mit der des Geräts, das an den USB-Bus angeschlossen ist, verglichen. Alle Schlüssel müssen identisch sein, um dem Gerät den Namen lp_hp im Verzeichnis /dev zuzuweisen. Darüber hinaus wird es einen symbolischen Link namens /dev/printers/hp anlegen, der auf die Geräteverknüpfung verweist. Das Verzeichnis printers wird dabei automatisch erzeugt. Druckaufträge können danach an /dev/printers/hp oder /dev/lp_hp geschickt werden.