Warum /dev und /proc/devices in Linux völlig unterschiedliche Ausgaben haben

Warum /dev und /proc/devices in Linux völlig unterschiedliche Ausgaben haben

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_blkdevzusammen 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 /devwerden 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-diskund /dev/that-diskstatt /dev/sdaund 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.

verwandte Informationen