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.
Ü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"
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.