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.
« Zurück
1
2
3
4
Weiter »