Gerätedatei

Aus Mikiwiki
Zur Navigation springen Zur Suche springen

Die Gerätedatei (auch: Spezialdatei; 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 Shell-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.
  • "/dev/ttyS0" (IRQ4, port 0x3f8) entspricht "COM1" unter Microsoft DOS.
  • "/dev/ttyS1" (IRQ3, port 0x2f8) entspricht "COM2" unter Microsoft DOS.
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

Weblinks

Vorlage:Weblinks1