Gerade im Bereich der Erkennung und Verwaltung von Hardware hat sich unter Linux in den letzten Jahren einiges getan. Längst vergangen sind die Zeiten statisch angelegter Gerätedateien im Verzeichnis /dev, und auch Devfs hat mittlerweile ausgedient. Udev [1] übernimmt seit Kernel 2.6 sowohl die Aufgaben des Device-Filesystems als auch die von Hotplug. Dazu gehören unter anderem das Anlegen der entsprechenden Gerätedatei, das Setzen der Zugriffsrechte und optional der Start bestimmter Programme.
Im Gegensatz zu seinem Vorgänger arbeitet Udev im Userspace, das heißt als "normales" Programm. Das bringt verschiedene Vorteile mit – unter anderem die Tatsache, dass die Verwaltung und Namensgebung der angeschlossenen Geräte nicht beim Kernel liegt und sich daher leichter konfigurieren lässt. Für den Anwender bietet Udev weitere Vorteile: So kann er die Gerätenamen frei wählen, und die Zuordnung der Hardware fällt eindeutig aus. Damit das alles reibungslos klappt, benötigt Udev Regeln – anhand dieser entscheidet das Programm dann, wie ein Gerät heißen und was weiterhin passieren soll.
Geräteschuppen
Udevs "Ablage" ist das Verzeichnis /dev. Hier liegen die Gerätedateien, über welche die Anwendungen auf die Hardware zugreifen. Werfen Sie einen Blick in diesen Ordner, sehen Sie nicht nur die Dateinamen für die Festplatte(n) und Partitionen (zum Beispiel sda, entsprechend sda1, sda2), sondern auch für CD-/DVD-Laufwerke (in der Regel zeigt der Symlink cdrom auf das "echte" Device, zum Beispiel hdc), serielle Schnittstellen (beispielsweise ttyS0, ttyS1) und so weiter (Abbildung 1).
Das Betriebssystem speichert den Inhalt des Ordners /devin einem temporären Dateisystem. wovon Sie sich durch das Ausgeben der aktuell eingehängten Verzeichnisse leicht selbst überzeugen::
$ mount … udev on /dev type tmpfs (rw,mode=0755) …
Linux richtet die in /dev enthaltenen Dateien einerseits beim Systemstart ein, andererseits immer dann, wenn ein Gerät neu hinzukommt. Entsprechend verschwinden die Device-Namen, sobald Sie ein Gerät entfernen. Dafür, dass das das Verzeichnis einerseits übersichtlich und dynamisch bleibt, den Anwender aber andererseits nicht mit wechselnden Device-Namen verwirrt, dafür sorgen die Udev-Regeln.
Alles genau geregelt
Das Verhalten von Udev steuern zahlreiche Regeldateien, die Sie im Verzeichnis /etc/udev/ beziehungsweise in /etc/udev/rules.d/ finden. Bei einigen Distributionen, zum Beispiel unter Debian, sind die dort liegenden Dateien symbolische Links auf die Regeln in /etc/udev/.
Listing 1 zeigt, dass die Regeln durchnummeriert sind beziehungsweise mit einem Buchstaben beginnen. Der Grund: Udev arbeitet bei jedem Ereignis das Verzeichnis in lexikalischer Reihenfolge ab. Dieses Vorgehen stellt sicher, dass wichtige Regeln zuerst an die Reihe kommen. An der letzten Stelle steht normalerweise immer die Anweisung für den HAL-Daemon (Udev informiert diesen über das neue Gerät).
$ ls -la /etc/udev/rules.d/ … lrwxrwxrwx 1 root root 20 2007-05-09 23:40 020_permissions.rules -> ../permissions.rules lrwxrwxrwx 1 root root 19 2007-05-10 00:39 025_libgphoto2.rules -> ../libgphoto2.rules lrwxrwxrwx 1 root root 16 2007-05-10 00:39 025_libsane.rules -> ../libsane.rules … lrwxrwxrwx 1 root root 12 2007-05-10 00:36 z99_hal.rules -> ../hal.rules @KE;
In einer solchen Regeldatei finden eine oder mehrere Anweisungen Platz; diese stehen jeweils in einer durchgehenden Zeile (ohne Umbruch). Sie enthalten verschiedene Bedingungen und Steuerbefehle, jeweils durch Kommas voneinander getrennt. Die von der Shell bekannten Platzhalter wie *, ?, [...] und so weiter sind erlaubt. Darüber hinaus finden Sie in den Regeln verschiedene Operatoren (Tabelle "Operatoren"). Die Tabelle "Udev: Konstanten und Variablen" zeigt eine Übersicht häufig verwendeter Konstanten und Variablen. Die Operatoren, alle verfügbaren Konstanten und Variablen listet darüber hinaus die Manpage (man udev) auf.
Operatoren
| Operator | Typ | Bedeutung |
|---|---|---|
==
|
Vergleich | wahr, wenn beide Ausdrücke gleich sind |
!=
|
Vergleich | wahr, wenn die beiden Ausdrücke ungleich sind |
=
|
Zuweisung | weist den Wert der rechten Seite der linken zu |
:=
|
Zuweisung | wie =, schützt die linke Seite aber vor späteren Veränderungen
|
+=
|
Zuweisung | fügt der linken Seite den Wert der rechten an |
Udev: Konstanten und Variablen
| Name | Bedeutung |
|---|---|
ACTION
|
Ereignis, entweder add oder remove
|
SUBSYSTEM
|
Gerätetyp, zum Beispiel usb_device, block, und so weiter
|
BUS
|
Bussystem des Geräts, zum Beispiel ieee1394 oder usb
|
ID
|
Geräte-ID (bezogen auf den Bus) |
NAME
|
Name des Netzwerkgeräts (eth0, eth1 etc.) oder der Gerätedatei in /dev
|
KERNEL
|
Gerätename laut Kernel |
SYSFS{Datei
}
|
Verwendet Informationen bestimmter Dateien aus /sys (enthalten Angaben zur Hardware); pro Regel maximal fünf SYSFS-Konstanten
|
OWNER
|
Besitzer (Benutzername oder UID) |
GROUP
|
Gruppe (Name oder GID) |
MODE
|
Zugriffsrechte (Oktalzahlen) |
RUN
|
führt das angegebene Programm aus. |
SYMLINK
|
legt einen symbolischen Link an, der auf den tatsächlichen Devicenamen verweist. |
GOTO
|
springt zu einer angegebenen Sprungmarke. |
LABEL
|
Name der Sprungmarke |



