6.3. udev

udev ist ein Dienstprogramm, mit dessen Hilfe die Gerätedateien für den Linux Kernel verwaltet werden. Es ermöglicht es auf das Hinzufügen bzw. Entfernen von Geräten zu reagieren, und darauf hin Befehle auszuführen oder den Geräten Attribute zuzuweisen, die von Programmen ausgewertet werden können, um zu entscheiden, wie ein Gerät behandelt werden soll.

6.3.1. udev-Regeln

Über so genante udev-Regeln lässt sich festlegen, wie das System auf die (De-)initialisierung von Geräten reagieren soll. Eine Regel umfasst zum einen Vergleichskriterien wie z.B. die Aktion (add, change, remove), den Gerätetyp, die Hersteller- und Produkt-ID oder das Subsystem, dem das Gerät zugeordnet wird und zum anderen Aktionen wie das Setzen von Attributen, symbolischen Verknüpfungen und das Ausführen von Befehlen. Eine Regel wird auf alle Geräte angewandt, für die die definierten Vergleichskriterien zutreffen.

Regeln, die aus installierten Paketen der Distribtion stammen, befinden sich im Verzeichnis /lib/udev/rules.d/. Für eigene Anpassungen empfiehlt es sich neue Regeln im Verzeichnis /etc/udev/rules.d/ anzulegen, da diese durch Paketupdates nicht überschrieben werden. Die Dateiendung ist .rules, also würde man z.B. so eine Regel anlegen, um auf neu initialisierte DVB-Karten zu reagieren und ihnen die Attribute dynamite_attached=yes und dynamite_instanceid=0 zuzuweisen, so dass ein VDR mit dem dynamite-Plugin diese Karten nur einbindet, wenn er mit der Instanz-ID 0 läuft:

/etc/udev/rules.d/40-instanceid-0-dvb.rules

ACTION=="add", SUBSYSTEM=="dvb", ENV{DVB_DEVICE_TYPE}=="frontend" \
  , ENV{dynamite_attach}="yes" \
  , ENV{dynamite_instanceid}="0"

udev-Regeln erstellen

Eine empfehlenswerte Anleitung zum Erstellen von udev-Regeln findet man auf http://www.reactivated.net/writing_udev_rules.html

Zum Erstellen einer udev-Regel benötigt man zunächst Informationen über das oder die Geräte, auf die man reagieren möchte. Mit Hilfe von udevadm info kann man sich Informationen zu einem Gerät anzeigen lassen:

$ udevadm info --query=all --name=/dev/dvb/adapter0/frontend0
P: /devices/pci0000:00/0000:00:1c.1/0000:04:00.0/dvb/dvb0.frontend0
N: dvb/adapter0/frontend0
E: DEVNAME=/dev/dvb/adapter0/frontend0
E: DEVPATH=/devices/pci0000:00/0000:00:1c.1/0000:04:00.0/dvb/dvb0.frontend0
E: DVB_ADAPTER_NUM=0
E: DVB_DEVICE_NUM=0
E: DVB_DEVICE_TYPE=frontend
E: ID_FOR_SEAT=dvb-pci-0000_04_00_0
E: ID_PATH=pci-0000:04:00.0
E: ID_PATH_TAG=pci-0000_04_00_0
E: MAJOR=212
E: MINOR=3
E: SUBSYSTEM=dvb
E: USEC_INITIALIZED=760632

jedes der Attribute kann nun genutzt werden, um in einer udev-Regel zu bestimmen, anhand welcher Merkmale die Regel auf bestimmte Geräte angewendet werden soll.