
Soweit ich weiß:
Ein Treiber kann einem oder mehreren „Geräten“ zugeordnet sein.
Dateien unter /dev stellen diese Geräte dar. Der Treiber hat eine Hauptnummer und jedes Gerät hat auch eine Nebennummer, sodass (Haupt-, Nebennummer) ein Gerät identifiziert.
/proc/devices listet auch die Geräte auf.
Wenn das, was ich weiß, wahr ist, dann:
Warum haben /dev und /proc/devices völlig unterschiedliche Ausgaben? In dev gibt es Gerätename, Hauptnummer und Nebennummer. Und in /proc/devices gibt es Hauptnummer und Gerätename, aber keine Nebennummer. Warum zeigen diese beiden Listen selbst bei derselben Hauptnummer völlig unterschiedliche Ausgaben?
Sehen Sie sich beispielsweise diese Zeile in ls -l /dev an
crw------- 1 root root 10, 235 Sep 19 21:40 autofs
Es ist ein Zeichengerät mit der Hauptnummer 10 und der Nebennummer 235. Der Gerätename ist autofs.
Nun prüfe ich den Eintrag mit der gleichen Major-Nummer in /proc/devices:
10 misc
Wie Sie sehen, ist der Gerätename völlig anders und es gibt keine Nebennummer (wie kann ein Gerät nur anhand der Hauptnummer identifiziert werden?).
Scheint, als ob einige Begriffe durcheinandergeraten sind, aber ich konnte das nicht lösen.
Antwort1
Kernelmodule (Treiber, wenn Sie so wollen) können Block- oder Zeichengeräte (im traditionellen Unix-Sinne ist „Gerät“ ein Wort mit vielen Bedeutungen) im Kernel registrieren, indem sie eine Routine wie register_blkdev
zusammen mit einer Zeichenfolge verwenden, die das Gerät identifizieren soll. Es ist möglich, Folgendes zu verwenden:beliebigZeichenfolge für diesen Zweck, und diese Zeichenfolgen werden in der Datei angezeigt /proc/devices
(die lediglich eine Textdarstellung dieser Kerneltabelle ist).
Andererseits /dev
werden in modernen Linux-Systemen Dateien nach einer Reihe komplizierter Regeln erstellt udev
. Diese Dateien sollen Möglichkeiten für die Interaktion des Benutzerbereichs mit dem Kernel über Lese-, Schreib- und Ioctl-Vorgänge darstellen. Dies funktioniert, weil es sich um „spezielle“ Dateien mit einer Haupt- und Nebengerätenummer handelt, sodass Zugriffe auf diese Dateien (grob gesagt) in Kernelaufrufe übersetzt werden.
Diese beiden und ihre Struktur haben überhaupt nichts miteinander zu tun. Die einzige Verbindung besteht darin, dass die Hauptgerätenummer einer solchen speziellen Datei bei jedem Zugriff auf eine solche Datei nachgeschlagen und verwendet wird, um das Modul zu finden, das sie registriert hat. Die Zeichenfolge, unter der sie registriert wurde, ist völlig irrelevant. Der Name, unter dem eine Datei erscheint, ist ebenfalls völlig irrelevant, solange der Benutzer den Namen kennt. Nichts hindert Sie daran, Ihre Festplatten /dev/this-disk
und /dev/that-disk
statt /dev/sda
und zu nennen, wenn Sie das Bedürfnis dazu verspüren und die Regeln /dev/sdb
ändern .udev
AberNatürlichMenschen machen es sich gerne einfach. Deshalb sind die Zeichenfolgen, die zur Registrierung von Geräten verwendet werden, häufig dieselben oder zumindest ähnlich den Standardnamen, unter denen sie in angezeigt werden /dev
. Aber das ist die einzige Verbindung.