Open Source im professionellen Einsatz

Dynamische Geräteverwaltung mit Udev

Knoten knüpfen

Statische Gerätedateien sind angesichts aktueller Hardware nicht mehr zeitgemäß. So erfordert Hotplugging an USB- und anderen Bussen dynamisches Gerätehandling. DevFS erfüllt zwar viele Ansprüche an eine solche Lösung, wird aber nun von Udev abgelöst.

Von Unix hat Linux das Konzept "Alles ist eine Datei" geerbt. Dabei greifen Programme auf angeschlossene Hardware über so genannte Device Nodes (Gerätedateien) zu. Diese speziellen Dateien sind durch ihren Typ (Block- oder Zeichengerät) sowie Major- und Minor-Nummer definiert und wurden bislang mit »mknod« angelegt. Bei dieser statischen Lösung enthält das Verzeichnis »/dev« für jedes Gerät, das eventuell einmal dem System hinzugefügt werden könnte, bereits einen Eintrag - insgesamt einige tausend Gerätedateien, was die Übersicht doch sehr erschwert.

Zu statisch

Das Konzept hat noch weitere Nachteile: So bietet die Struktur keinen Überblick, welche Geräte wirklich vorhanden sind oder korrekt von Treibern erkannt wurden. Zudem besitzen Device Nodes kein über mehrere Bootvorgänge stabiles Namensschema: Welches SCSI-Gerät via »/dev/sg*« oder welcher USB-Drucker mit »/dev/usblp?« angesprochen wird, hängt allein von der zufälligen Reihenfolge ab, in der sie ins System gelangen. Wünschenswert ist oft auch eine flexiblere Namensgebung, etwa in Serversystemen mit sehr vielen Platten, wo ein eindeutiger UUID (Universal Unique Identifier) beim gezielten Wiederfinden hilft oder dem Anwender besser lesbare Namen bringt.

Alternative: DevFS

Standardmäßig verwendet zum Beispiel Mandrake 10.0 statt statischer Files das DevFS, um die beschriebenen Probleme zu lösen. Da DevFS bereits Thema in Heft 03/04[1] war, soll an dieser Stelle ein kurzer Überblick genügen.

DevFS erfüllt einen Teil der oben beschriebenen Anforderungen: Es erzeugt nur für erkannte Geräte überhaupt Device Nodes und verwendet dafür auch lesbare Namen, die der Benutzer durch Symlinks erweitert kann. Seine Arbeit erledigt DevFS im Kernel. Gerätetreiber benötigen spezielle Unterstützung und müssen mit den Funktionen »devfs_mk _dir()«, »devfs_mk_bdev()«, »devfs_mk _cdev()« und »devfs_remove()« die Device Nodes selbst registrieren und wieder entfernen.

DevFS verwendet standardmäßig andere Namen als die gewohnten. IDE-Geräte finden sich in »/devfs/ide/«, SCSI-Geräte in »/devfs/scsi/«, serielle Schnittstellen in »/devfs/tts/« wieder. Alle Festplatten werden durch symbolische Links in »/devfs/discs«, CD-ROMs in »/devfs/cdroms« zusammengefasst. Die Dateinamen sind bei DevFS auch fest im Kernel kodiert. Jeder Treiber muss Funktionen für die spezielle DevFS-Registrierung enthalten.

Nach Aussagen vieler Kernelentwickler enthält DevFS allerdings auch Race-Conditions, die bei ungünstigen Event-Reihenfolgen auftreten können. Aus diesen und anderen Gründen benutzen die meisten aktuellen Distributionen mittlerweile das andere dynamische Gerätedatei-System Udev.

Diesen Artikel als PDF kaufen

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook