Unter Linux gegeben:
- ein Gerät, zum Beispiel
/dev/sda
, - und seine großen und kleinen Zahlen, zum Beispiel
8, 0
,
wie kann ich wissen, welches Modul / welcher Treiber es "fährt"?
Kann ich mich damit befassen /sys
oder /proc
es entdecken?
linux
drivers
kernel-modules
Totor
quelle
quelle
lsmod
,/proc/modules
undmodinfo
?Antworten:
Um diese Informationen
sysfs
für eine Gerätedatei abzurufen, ermitteln Sie zuerst die Haupt- / Nebenzahl, indem Sie die Ausgabe vonls -l
zDas
8, 0
sagt uns, dass die Hauptzahl8
und die Nebenzahl ist0
. Derb
am Anfang der Auflistung steht auch, dass es sich um ein Blockgerät handelt. Andere Geräte könnenc
am Anfang ein For-Character-Gerät haben.Wenn Sie dann unter nachsehen
/sys/dev
, sehen Sie, dass es zwei Verzeichnisse gibt. Einer hat angerufenblock
und einer hat angerufenchar
. Hier ist es ein Kinderspiel, dass dies für Block- bzw. Zeichengeräte gilt. Jedes Gerät ist dann über seine Haupt- / Nebenstellennummer in diesem Verzeichnis erreichbar. Wenn für das Gerät ein Treiber verfügbar ist, können Sie diesen finden, indem Sie das Ziel desdriver
Links in diesem oder demdevice
Unterverzeichnis lesen . Zum Beispiel kann/dev/sda
ich für meine einfach tun:Dies zeigt, dass der
sd
Treiber für das Gerät verwendet wird. Wenn Sie sich nicht sicher sind, ob es sich bei dem Gerät um ein Block- oder Zeichengerät handelt, können Sie in der Shell diesen Teil einfach durch ein ersetzen*
. Das funktioniert genauso gut:Auf Blockgeräte kann auch direkt über ihren Namen über
/sys/block
oder zugegriffen werden/sys/class/block
. Z.B:Beachten Sie, dass sich das Vorhandensein verschiedener Verzeichnisse in
/sys
Abhängigkeit von der Kernelkonfiguration ändern kann. Auch haben nicht alle Geräte einendevice
Unterordner. Dies ist beispielsweise der Fall für Partitionsgerätedateien wie/dev/sda1
. Hier muss auf das Gerät für die gesamte Festplatte zugegriffen werden (leider gibt es dafür keinesys
Links).Als letztes kann es nützlich sein, die Treiber für alle Geräte aufzulisten, für die sie verfügbar sind. Dazu können Sie mit Hilfe von Globs alle Verzeichnisse auswählen, in denen die Treiberlinks vorhanden sind. Z.B:
Um ein wenig von der Frage abzuweichen, füge ich einen weiteren
/sys
Glob-Trick hinzu, um einen viel umfassenderen Überblick darüber zu erhalten, welche Treiber von welchen Geräten verwendet werden (allerdings nicht unbedingt die mit einer Gerätedatei):Aktualisieren
Wenn Sie sich die Ausgabe von genauer ansehen
udevadm
, scheint dies zu funktionieren, indem Sie das kanonische/sys
Verzeichnis suchen (wie Sie es erhalten würden, wenn Sie die Haupt- / Nebenverzeichnisse oben dereferenzieren würden), dann den Verzeichnisbaum nach oben durcharbeiten und alle gefundenen Informationen ausdrucken. Auf diese Weise erhalten Sie Informationen zu übergeordneten Geräten und den von ihnen verwendeten Treibern.Um damit zu experimentieren, habe ich das folgende Skript geschrieben, um den Verzeichnisbaum zu durchlaufen und Informationen auf jeder relevanten Ebene anzuzeigen.
udev
scheint auf jeder Ebene nach lesbaren Dateien zu suchen, in die ihre Namen und Inhalte eingefügt werdenATTRS
. Anstatt dies zu tun, zeige ich den Inhalt deruevent
Dateien auf jeder Ebene an (anscheinend definiert das Vorhandensein dieser Ebene eine andere als nur ein Unterverzeichnis). Ich zeige auch den Basisnamen aller gefundenen Subsystem-Links und dies zeigt, wie das Gerät in diese Hierarchie passt.udevadm
zeigt nicht die gleichen Informationen an, daher ist dies ein nützliches ergänzendes Tool. Die übergeordneten Geräteinformationen (z. B.PCI
Informationen) sind auch nützlich, wenn Sie die Ausgabe anderer Toolslshw
an Geräte höherer Ebene anpassen möchten .quelle
udevadm
Antwort wird Ihnensd
und gebenahci
. Gibt es eine Möglichkeit, festzustellen,ahci
ob auch verwendet wird?device/device/
, alsoreadlink
sah mein Befehl so ausreadlink /sys/dev/char/XX\:Y/device/device/driver
.Sie können das
udevadm
Tool verwenden, um dies zu entdecken.Der Befehl wäre
udevadm info -a -n /dev/sda
, und dann schauen Sie sich dieDRIVER==
Parameter an.Dies zeigt, dass tatsächlich 2 Treiber an der Bereitstellung dieses Geräts beteiligt sind,
sd
undahci
. Der erstesd
ist direkt für das/dev/sda
Gerät verantwortlich, nutzt aber denahci
Treiber underneith.Die Ausgabe des
udevadm
Befehls sieht folgendermaßen aus und enthält eine Beschreibung der Funktionsweise.quelle
udevadm
entfernt (oder sogar empfohlen) wird? Ich kann nichts finden, was einen Hinweis darauf gibt.Verwenden Sie den Befehl hwinfo und geben Sie das Modell und den Treiber aus. Wenn kein Treiber vorhanden ist, wird dieser nicht angezeigt. Zum Beispiel für Festplatten:
Für Netzwerkkarten:
Für USB-Geräte:
Verwenden Sie hwinfo --help, um herauszufinden, welche anderen Gerätetypen Sie abfragen können. hwinfo wird standardmäßig installiert, z. B. unter SUSE Linux.
quelle
--only
Option hinzufügen . Eghwinfo --block --only /dev/sda | grep ...
.lshw
ist ein großartiges Tool, um die in Ihrem Computer gefundene Hardware aufzulisten. Sie müssen es zuerst installieren, bevor Sie es ausführen können.Verwenden Sie
yum
oderapt-get
je nach verwendetem System. Gehen Sie dann wie folgt vor, um die Speicherhardware speziell aufzulisten:Möglicherweise möchten Sie es ausführen
root
, um alle Informationen zurückzugewinnen.Ansonsten
lspci
kann man auch Angaben zu deiner Hardware machen:Um die Haupt- und Nebennummer eines Geräts herauszufinden, führen Sie
ls
es einfach aus .In dieser Ausgabe bedeutet
b
inbrw-rw----.
, dass es sich um ein Blockgerät handelt. Die Ziffern8
und0
sind jeweils die Haupt- und Nebennummer des Geräts.quelle
lshw
und sehenlspci
Sie das von einem Gerät verwendete Modul: configuration: driver = ahci latence = 0 und den verwendeten Kerneltreiber: ahci .