ForumGerätedateien
Walter Lösch – Sonntag, 04. November 2007 12:30 Uhr

Ich habe folgende allgemeine Frage:

damit ein Gerät über eine Gerätedatei im Verzeichnis /dev/… angesprochen werden kann, setzt doch sicher voraus, daß eine Verknüpfung zwischen dem Gerät (geladenes Kernelmodul vorausgesetzt) und dem Device-Node hergestellt wird.

Also z. B.: ISDN-Karte eingebaut, hisax-Treiber geladen, mit der Karte wird über /dev/isdn0 kommuniziert.

Wie genau funktioniert diese Zuordnung? Woher genau weiß das System, daß die ISDN-Karte und die Datei /dev/isdn0 zusammengehören?

1 Antwort
Rico Rommel – Sonntag, 04. November 2007 16:00 Uhr

Hallo Walter,

ich kenne mich in Sachen Kernel zwar auch nicht so toll aus, versuche es aber
trotzdem mal.

Die Dateien in /dev/sind keine gewöhnlichen Dateien.
Die Zuordnung Datei – Geräte erfolgt über Major- und Minor-Nummern, wobei die
Major-Nummer die Geräteklasse und die Minor-Nummer das spezielle Gerät angibt.
Zusätzlich gibt es noch die Information, ob das Gerät block- oder
zeichenorientiert ist.

Welche Nummern welche Gerätedatei hat, kannst du einfach mit ls -l
feststellen. Statt der Dateigröße werden besagte Nummern angezeigt.
Eine Übersicht findest du in der Kerneldokumentaion in devices.txt oder unter
[1].

Beispiel Parallelport:

ls -l für /dev/lp0 zeigt

major = 6 = Parallelport
minor = 0 = erster vom Kernel erkannter Parallelport (der zweite hätte dann 1
usw.)

Die Gerätedateien werden übrigens mit mknod
angelegt. Auf aktuellen Systemen übernimmt udev diese Aufgabe.

mfg
Rico

[1] http://lanana.org/docs/device-list/devices-2.6+.txt

Kevin Krammer – Montag, 05. November 2007 02:43 Uhr

Im Grunde genommen richtig, nur wird seit einigen Versionen die Vergabe dynamischer gestaltet und zwar mittels “udev”.

Im Linux Magazin Archiv gibt es dazu mehrmals gute Artikel, zum Beispiel [1]

Im Wesentlichen meldet der Kernel einige Merkmale jedes Gerätes an ein spezielles Programm, den udev Daemon, der dann nach einem Regelsatz entscheidet, ob und welche Gerätedatei er anlegt und mit welchen Zugriffsrechten usw. er sie ausstattet.

[1] http://www.linux-magazin.de/heft_abo/ausgaben/2006/09/geraeteverwalter?category=0

Tobias Hunger – Montag, 05. November 2007 17:02 Uhr

Gibt es diese dynamische Zuordnung bereits? Soweit ich weiss ist die Zuordnung
von Major/Minor Nummern zu Geräten immer noch fest.

Es gab mal viel Wind um eine dynamische Zuordnung, einfach weil die
Kombinationen von Major/Minor Nummern ausgingen: An USB kann man (wenn ich
mich recht erinnere) 127 Geräte anschliessen. Theoretisch könnten das 127
Drucker oder 127 Mäuse oder 127 Scanner oder oder oder sein. Man braucht also
eine Mayer Number für jeden USB Port und eine Minor number für jeden
Maus/Drucker/Scanner/etc. der daran angeschlossen sein könnte. Da kommt man
dann gleich auf recht große Zahlenbereiche, die von USB “blockiert” werden.
Grosse Plattenarrays sind auch nicht besser: Jede denkbare Partition auf jeder
evtl. angeschlossenen Platte braucht ihre eigene Kombination!

Mit udev könnte man eigentlich den Kernel irgendwelche freien Kombinationen
von Major/Minor Nummern vergeben und damit dann das Device in /dev anlegen
lassen. So eine dynamische Vergabe der Nummern wird auch irgendwann passieren.
Eine völlig dynamische Vergabe der Nummern über udev scheiterte aber soweit
ich weiss an der ganzen Software, die einfach annimmt, das Mayor X, Minor Y
schon genau das Gerät ist, das sie dort erwarten. Soweit ich weiss wurde statt
dessen nur der Zahlenbereich für Mayor und Minor Nummern vergrößert und die
statische Zuordnung bei behalten.

Ich kann da aber auch was verpasst haben… Ich fände es nett, wenn udev schon
alles dynamisch vergeben würde;-)