Gerätedatei
Die Gerätedatei (engl. device file, device node) ist eine besondere Art von Dateien, die unter fast allen Unix-Derivaten und vielen anderen Betriebssystemen genutzt wird.
Jede Gerätedatei im Verzeichnis "/dev" ermöglicht Anwendungsprogrammen unter Benutzung des Kernels den Zugriff auf eine bestimmtes Gerät (engl. device) bzw. eine Hardwarekomponente des Systems. Es handelt sich nicht um Dateien im eigentlichen Sinn, aber aus der Sicht eines Programms erscheinen sie wie Dateien - sie lassen sich über dieselben Systemaufrufe öffnen, lesen, schreiben oder schliessen. Beim Zugriff auf eine solche Gerätedatei erkennt der Kernel die I/O-Anforderung und reicht sie an einen Gerätetreiber weiter, der die entsprechende Operation ausführt - etwa Daten aus einer seriellen Schnittstelle lesen oder Daten an eine Soundkarte schicken.
Untereinander unterscheiden sich die Gerätedateien durch ihren Namen, ihren Typ (Block- oder Zeichengerät) und ihre Major- sowie Minor-Nummer. Beispielsweise repräsentiert auf einem Linux-System die Gerätedatei "/dev/hda1" die erste Partition der Festplatte "/dev/hda" und trägt dabei die Major-Nummer 3 und die Minor-Nummer 1.
Zum Anlegen einer neuen Gerätedatei wird der Befehl mknod verwendet. Bei traditioneller Verwaltung dieser Dateien geschieht das während der Installation. Das Verzeichnis "/dev" enthält danach einen Eintrag für jedes gerät, das der Systemverwalter vielleicht einmal dem System hinzufügen möchte. Allerdings leidet die Übersichtlichkeit unter der Fülle an Einträgen, die zudem für den konkreten Rechner grösstenteils unnötig sind. Bei diesem herkömmlichen Ansatz bestimmt die Reihenfolge, in der Geräte angeschlossen werden darüber, welches gerät der Kernel welcher Gerätedatei zuordnet. Die erste erkannte SCSI-Paltte bildet sich beispielsweise immer auf die Gerätedatei "/dev/sda" ab, die nächste entsprechend auf "/dev/sdb". Das kann dazu führen, dass ein und dasselbe Gerät zu verschiedenen Zeiten über mehrere Gerätedateien erreichbar ist und der Rechner es entsprechend in verschiedene Verzeichnisse einhängt.
Die bessere Lösung ist dabei , dass das System die Gerätedatei erst dann anlegt oder löscht, wenn der benutzer Hardware hinzufügt oder entfernt. Über die Zuordnung von Namen zu Geräten entscheiden dann Regeln anstelle der Reihenfolge. So kann etwa sichergestellt werden, dass eine bestimmte Festplatte immer über dieselbe Datei zu erreichen ist und sich immer an derselben Stelle ins Dateisystem einbindet - ganz gleichgültig, welche anderen Geräte zu welchem Zeitpunkt den Bus mitbenutzen oder nicht.
Eine Zeitlang konkurrierten die Systeme devfs und udev um die Rolle des intelligenten Geräteverwalters; inzwischen flog devfs endgültig aus dem Kernel.
Arten von Gerätedateien
Unix unterscheidet grundsätzlich zwei Arten von Geräten.
Abkürzung | Gerätetyp | Beispiele |
---|---|---|
b | blockorientiertes Gerät (engl. block device) | Festplatte |
c | zeichenorientiertes Gerät (engl. character device) | serielle Leitung, Arbeitsspeicher, Magnetband |
Zu den wichtigsten Gerätedateien im Verzeichnis "/dev" gehören die folgenden.
Gerätename | Typ | Gerät |
---|---|---|
audio | c | Soundkarte, Sun-kompatbibles I/O |
cdrom | l | Soft-Link auf vorhandenes CD-ROM-Laufwerk |
console | c | Systemkonsole |
cuaN | c | Callout-Geräte (COM1...) |
dsp | c | Soundgerät. |
dvd | l | Soft-Link auf vorhandenes DVD-Laufwerk |
fd0 | b | 1. Diskettenlaufwerk |
hda | b | 1. ATA/IDE-Gerät (Festplatte, CD/DVD-Laufwerk, usw.). Die Ausgabe von "ls -l /dev/hda" zeigt anstelle der Dateigrösse zwei Nummern: das sind die "major device number" und die "minor device number". Jede "major number" ist einem Gerätetreiber zugeordnet. Die "minor number" geht zu dem Gerät, das den Treiber benutzt (z. B. ein ATA/IDE-Treiber, der Festplatten, CD-ROMs und andere Hardware verwaltet). |
ht0 | c | 1. IDE-Bandlaufwerk |
lp0 | c | 1. parallele Schnittstelle |
midi | Soundgerät. | |
mixer | c | Soundgerät. |
mouse | l | Soft-Link auf Mausschnittstelle, z. B. "ttyS0" |
null | c | Das Daten-Nirwana. Was dahin geschrieben wird, wird sofort fortgeworfen. Wird aus "/dev/null" gelesen, so erhält man ein "end of file" (EOF). |
psaux | c | PS/2-kompatible Maus |
ptyN | c | Pseudoterminals |
rmt0 | l | Soft-Link auf das 1. SCSI-Bandlaufwerk "st0" |
nrmt0 | l | Soft-Link auf das 1. SCSI-Bandlaufwerk "st0" im "Non-rewind"-Modus (kein Zurückspulen) |
scda | b | 1. SCSI-CD/DVD-Laufwerk |
sda | b | 1. SCSI-Gerät (SATA-Festplatte, USB-Speichergerät, Zip-Laufwerk) |
sg* | Generische SCSI-Geräte, auf die Programme ohne Umweg über den Kernel zugreifen können. Solche Geräte werde3n von Scan- und Brennprogrammen verwendet. | |
st0 | c | 1. SCSI-Bandlaufwerk |
tape | l | Soft-Link auf Magnetband |
ttyn | c | virtuelle Konsolen (n ist eine Nummer) |
ttyS* | c | serielle Schnittstellen (n ist eine Nummer). Die Schnittstellen werden mit "cat /proc/ioports" angezeigt, "cat /proc/interrupts" zeigt allerdings nur die aktiven Geräte. |
zero | c | Wird von hier gelesen, so erhält man Null-Zeichen (jedes Bit ist eine Null). |
Eine Zusammenfassung der unter Linux vorhandenen Gerätedateien gehört seit der Kernel-Version 1.3.25 zu den Quellen und findet sich in der Datei "/usr/src/linux-2.4.18.SuSE/Documentation/devices.txt".
Verwendung
Ausgabe der Datei "file" auf den Drucker am ersten parallelen Port "/dev/lp0". Dieser Befehl benötigt keine besondere Software, um den Drucker anzusprechen.
$ cat file > /dev/lp0
Herausfinden, von welchem Typ ein Eintrag im Verzeichnis "/dev" ist. Das erste Zeichen der Ausgabe bezeichnet den Typ.
$ ls -lL /dev/tty0 crw-rw---- 1 root root 4, 0 2008-11-03 19:13 /dev/tty0 $ ls -lL /dev/sda brw-rw---- 1 root disk 8, 0 2008-11-03 19:13 /dev/sda