Gerätenamen unter Linux

Gerätenamen unter Linux

Gerätedatei (von engl. device file) sind spezielle Dateien, die unter fast allen Unix-Derivaten und vielen anderen Betriebssystemen genutzt werden. Sie ermöglichen eine einfache Kommunikation zwischen Userspace, zum Beispiel gewöhnlichen Anwenderprogrammen, und dem Kernel und damit letztlich der Hardware eines Computers. Diese Kommunikation ist transparent, da Gerätedateien wie normale Dateien verwendet werden.

Inhaltsverzeichnis

Gerätedateien unter Unix

Die Dateisysteme von unixartigen Betriebssystemen unterscheiden zwischen normalen Dateien und Verzeichnissen, FIFOs, Sockets sowie Blockdateien und Zeichendateien. Während normale Dateien und Verzeichnisse zum Standardfunktionsumfang gewöhnlicher Dateisysteme gehören, spielen bereits named pipes (FIFOs) eine Sonderrolle, zählen aber nicht zu den Gerätedateien. Erst bei den letzten drei Typen handelt es sich um Gerätedateien.

Damit unterscheiden unixartige Betriebssysteme zwischen drei Typen von Gerätedateien:

Zur Erkennung des Types einer (Geräte-)datei eignen sich klassische Unix-Kommandos wie ls oder file. Die Namen der Gerätedateien sind abhängig vom jeweiligen Unix-Derivat.

/dev im Dateisystembrowser Konqueror. Zu sehen sind die Icons der vielen verschiedenen Gerätedateien

Da meist für jedes Gerät eine eigene Gerätedatei existiert, sammelte man bereits in frühen Versionen von Unix diese Dateien im Verzeichnis /dev. Mit dem Filesystem Hierarchy Standard ist dieses Vorgehen standardisiert worden (Solaris speichert sie allerdings unter /devices), ferner ist vorgeschrieben, welche Gerätedateien in diesem Verzeichnis unter welchem Namen existieren müssen (siehe dazu die Listen weiter unten). Moderne Unix-Derivate benutzen oft spezielle (virtuelle) Dateisysteme, um dieses Verzeichnis aktuell zu halten. Unter Linux war dafür lange Zeit devfs populär, mittlerweile sorgt udev für die Verwaltung der Gerätedateien.

Gerätedateien werden als Schnittstelle zwischen Gerätetreibern oder Systemkomponenten und Anwendungsprogrammen, die im Userspace ablaufen, genutzt. So druckt man beispielsweise auf einem LPT-Drucker, der über die parallele Schnittstelle an den Computer angeschlossen ist, in dem man Text direkt in die Gerätedatei /dev/lp0 schreibt. Durch das Konzept der Gerätedateien sind Programme prinzipiell von den Gerätetreibern, die im Kernel agieren, getrennt. Außerdem erscheint die Benutzung eines Gerätes völlig transparent – man muss nicht erst ein spezielles Programm nutzen, sondern kann in eine Datei schreiben, die quasi dem Drucker "entspricht". Dies ermöglicht eine intiutive Benutzung der Hardware.

Das Konzept der Gerätedateien ist eine der Grundlagen für den Unix-Grundsatz Alles ist eine Datei und wurde beispielsweise mit Ansätzen wie dem Derivat Plan9 ausgebaut.

Blockorientierte Geräte

Typisches Icon für block devices

Blockorientierte Geräte übertragen Daten in Datenblöcken und werden daher oft für parallele Datenübertragungen genutzt. Alle diese Geräte nutzen den betriebssystemeigenen Puffer.

Beispiele für blockorientierte Geräte
Dateiname Bedeutung
fd0 1. Diskettenlaufwerk
hda IDE-Festplatte oder IDE-CD-ROM-Laufwerk am 1. Anschluss Master (in Linux)
hdb IDE-Festplatte oder IDE-CD-ROM-Laufwerk am 1. Anschluss Slave (Linux)
hda1 1. primäre Partition der ersten IDE-Platte (Linux)
hda15 11. logische Partition der ersten IDE-Platte (Linux)
wd0 IDE-Festplatte am 1. Anschluss Master (Net/OpenBSD)
ad0 IDE-Festplatte am 1. Anschluss Master (in FreeBSD)
ad1 IDE-Festplatte am 1. Anschluss Slave (FreeBSD)
ad0s1 1. Slice der ersten IDE-Platte (FreeBSD)
ad0s15 15. Slice der ersten IDE-Platte (FreeBSD)
ad0s1a 1. Partition im 1. Slice der ersten IDE-Platte (FreeBSD)
ad0s1b 2. Partition im 1. Slice der ersten IDE-Platte (FreeBSD)
acd0 IDE-CD-ROM-Laufwerk am 1. Anschluss Master (FreeBSD)
acd1 IDE-CD-ROM-Laufwerk am 1. Anschluss Slave (FreeBSD)
sda SCSI-(Wechsel-)Platte, kleinste SCSI-ID (Linux)
sdb SCSI-(Wechsel-)Platte, nächst größere SCSI-ID (Linux)
sda1 1. primäre Partition der ersten SCSI-(Wechsel-)Platte
sda15 11. logische Partition der ersten SCSI-(Wechsel-)Platte
da0 SCSI-(Wechsel-)Platte, kleinste SCSI-ID (FreeBSD)
da1s2e 5. Partition im 2. Slice der 2. SCSI-(Wechsel-)Platte (FreeBSD)
scd0 1. SCSI-CD-ROM-Laufwerk
cd0 1. SCSI-CD-ROM-Laufwerk (FreeBSD)
cCtTdDsS am C-ten SCSI-Controller mit SCSI-ID=T die D-te Festplatte und auf ihr das S-te Slice (Solaris)
cdrom symbolische Verknüpfung auf CD-ROM-Laufwerk

Zeichenorientierte Geräte

typisches Icon für char devices

Zeichenorientierte Geräte übertragen nur ein Zeichen (typischerweise ein Byte) zur selben Zeit, sind also der seriellen Datenübertragung zuzusprechen. Meist, aber nicht immer werden Daten ungepuffert, also sofort übertragen.

Beispiele für zeichenorientierte Geräte
Dateiname Bedeutung
ttyS0 1. Serielle Schnittstelle (entspricht COM1 unter Microsoft Windows)
lp0 1. Parallele Schnittstelle (entspricht LPT1 unter Microsoft Windows)
lp1 2. Parallele Schnittstelle
ttyX symbolische Verknüpfungen für Pseudoterminals
usbdev1.1 Gerätedateien für USB-Geräte sowie alle virtuellen Gerätedateien (Linux-spezifisch)
mouse symbolische Verknüpfung auf Maus-Gerätedatei

Die Netzwerkkarten (zum Beispiel Ethernet, ISDN) werden unter Linux nicht über Gerätedateien, sondern über den TCP/IP-Stack angesprochen, gleichwohl existieren oft auch Gerätedateien für Spezialanwendungen wie etwa zur direkten Ansteuerung der Hardware (Netlink Device, D-Channel, etc.).

Socketorientierte Geräte

Bei socketorientierten Dateien handelt es sich nicht um Gerätedateien, sondern eine Form von Interprozesskommunikation. Wie FIFOs sind sie damit keine Gerätedateien, können aber auch zur Kommunikation mit dem Kernel eingesetzt werden und nehmen dabei eine ähnliche Aufgabe wahr wie zeichenorientierte Geräte.

Beispiele für socketorientierte Geräte
Dateiname Bedeutung
/dev/log Socket für syslogd
/dev/gpmdata Socket für den GPM-Maus-Multiplexer
/dev/printer Socket für lpd

Virtuelle Gerätedateien

Einen Spezialfall stellen die virtuellen Gerätedateien dar. Bei diesen handelt es sich um Gerätedateien, mit denen kein echtes Gerät gesteuert wird. Die zuständige Logik wird dabei im Kernel implementiert.

Beispiele für virtuelle Gerätedateien
Dateiname Bedeutung
/dev/null verwirft jede Eingabe ohne eine Ausgabe zu produzieren
/dev/zero produziert einen Zeichenstrom, der nur aus Null-Oktetts (in C-Notation: '\000') besteht
/dev/random produziert echte Zufallszahlen oder wenigstens kryptografisch starke Pseudozufallszahlen (meist anhand von Hardware-Eingaben)
/dev/urandom produziert Pseudozufallszahlen (meist im Gegensatz zu /dev/random ohne zu blockieren, wenn keine Hardwaredaten anfallen)

Verwaltung der Gerätedateien am Beispiel Linux

Zum Erstellen von Gerätedateien dient das linuxspezifische Kommando mknod, welches zum Erstellen einer Gerätedatei die zugehörige Major- und Minornummer benötigt.

Wenn ein Benutzer bei frühen Linux-Versionen einen neuen Treiber installiert hat, so mussten eine oder mehrere Gerätedateien mit diesem mknod-Kommando unter Zuhilfename der Treiberdokumentation zwecks Angabe der notwendigen Major/Minor-Nummer angelegt werden, um die benötigte Schnittstelle zu schaffen. Viele Linux-Distributionen lieferten daher im /dev-Verzeichnisbaum bereits tausende von Gerätedateien mit, unwissend, ob diese jemals benötigt werden würden. Dies war einerseits unübersichtlich, andererseits war es schwierig, automatisch neue Treiber für neue Hardware zu laden, da die Gerätedateien immer manuell gepflegt werden mussten. Gerade einem Endanwender ist diese Aufgabe nicht zu überlassen.

Innerhalb mehrere Jahre und Kernel-Releases wurden so zwei neue Konzepte entwickelt:

devfs

Siehe Hauptartikel devfs

Im Linux-Kernelbaum 2.2 wurde das devfs eingeführt. Die zugrundeliegende Idee war, dass die Kernelmodule selbst Informationen zu den Namen der Gerätedateien, die sie erzeugen, neben den Minor- und Majornummern sowie dem Typ mit sich führen. Dadurch konnte der Kernel erstmals die Erzeugung der Gerätedateien selbst übernehmen.

Die benötigten bzw. vom Kernel und seinen Modulen gestellten Gerätedateien hat der Kernel anschließend automatisch in dem devfs-Dateisystem mit Hilfe des devfsd-Daemons erstellt. Das Dateisystem wurde dabei üblicherweise im Verzeichnis /dev gemountet.

udev

Siehe Hauptartikel udev

Nach reiflicher Überlegung schien das System mit devfs doch zu unflexibel. Gefordert wurde ein System, das beim Einstecken neuer Hardware reagiert (Hotplugging), die entsprechenden Kernelmodule lädt und die Gerätedateien anlegt und beim Ausstecken der Geräte diese wieder entfernt. Zusätzlich sollte es möglich sein, über ein Regelwerk selbst zu definieren, welches Namensschema man für seine Gerätedateien anwenden möchte, wie diese in Unterverzeichnissen strukturiert werden sollen etc.

Mit der Einführung von Kernel 2.6 wurde udev dieses neue Geräteverwaltungskonzept. Ähnlich wie bei devfs gibt es auch hier einen Daemon der im Userspace läuft und die eigentliche Arbeit erledigt. Bei udev kommt jedoch kein eigenes Dateisystem zum Einsatz, außerdem ist die notwendige Kernelkomponente deutlich schlanker, also kleiner und einfacher.

Gerätedateien unter Windows

Auch unter Microsoft Windows gibt es Gerätedateien: Auf sie kann man als Programmierer mittels der Subroutine CreateFile() zugreifen. Der Name einer Gerätedatei hat das Format \\.\NAME. Gerätedateien sind nicht, wie unter Unix, unter gewöhnlichen Verzeichnissen anzutreffen, die Kommunikation erfolgt entsprechend auch nicht (für den Benutzer) transparent. Im Allgemeinen hat man als Benutzer mit der Windows-Shell keine Möglichkeit, mit den Gerätedateien in Berührung zu kommen.

Weblinks


Wikimedia Foundation.

Игры ⚽ Поможем написать курсовую

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Linux-Kernel — Linux (Kernel) Entwickler Linus Torvalds u. v. m. Sprache(n) …   Deutsch Wikipedia

  • Linux Kernel — Linux (Kernel) Entwickler Linus Torvalds u. v. m. Sprache(n) …   Deutsch Wikipedia

  • Linux (Kernel) — Bildschirmfoto …   Deutsch Wikipedia

  • Linuxkernel — Linux (Kernel) Entwickler Linus Torvalds u. v. m. Sprache(n) …   Deutsch Wikipedia

  • O(1)-Scheduler — Linux (Kernel) Entwickler Linus Torvalds u. v. m. Sprache(n) …   Deutsch Wikipedia

  • Laufwerk (EDV) — 5,25″ Diskettenlaufwerk, Technik der 1980er Jahre 3,5″ Diskettenlaufwerk, z. T. auch heute noch verwendet …   Deutsch Wikipedia

  • Laufwerksbuchstabe — 5,25″ Diskettenlaufwerk, Technik der 1980er Jahre 3,5″ Diskettenlaufwerk, z. T. auch heute noch verwendet …   Deutsch Wikipedia

  • Speicherlaufwerk — 5,25″ Diskettenlaufwerk, Technik der 1980er Jahre 3,5″ Diskettenlaufwerk, z. T. auch heute noch verwendet …   Deutsch Wikipedia

  • devfs — (engl. Abk. Device Filesystem, übersetzt Gerätedateisystem) ist ein spezielles Dateisystem für viele Unix artige Betriebssysteme. Da die Implementierung von devfs im Linux Kernel einige Unzulänglichkeiten hat und nicht mehr aktiv weiterentwickelt …   Deutsch Wikipedia

  • Dateisystem — Das Dateisystem ist die Ablageorganisation auf einem Datenträger eines Computers. Dateien müssen gelesen, gespeichert oder gelöscht werden. Für den Nutzer müssen Dateiname und computerinterne Dateiadressen in Einklang gebracht werden. Das leichte …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”