Udev- Wie finde ich heraus, zu welchem ​​Subsystem ein Gerät gehört?

19

Zum Beispiel habe ich Gerät / dev / sdb. Wie finde ich heraus, dass es sich um ein udev-Subsystem handelt?

Rucent88
quelle

Antworten:

12
$ udevadm info -q all -a /dev/sdb

ANMERKUNG: Das oben Gesagte fragt die UDEV-Datenbank nach Geräteinformationen ab, fragt infoalle Informationen ab -q allund führt alle Attribute auf, die /syssich auf dieses Geräteetikett beziehen.

Auszug

   --attribute-walk|-a
       Print all sysfs properties of the specified device that can be used 
       in udev rules to match the specified device. It prints all devices
       along the chain, up to the root of sysfs that can be used in udev 
       rules.

Beispiel

Hier ist mein /dev/sdaGerät.

$ udevadm info -q all -a /dev/sda | grep parent
walks up the chain of parent devices. It prints for every device
and the attributes from one single parent device.
  looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0':
  looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0':
  looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1/host0':
  looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1':
  looking at parent device '/devices/pci0000:00/0000:00:1f.2':
  looking at parent device '/devices/pci0000:00':

Unterschiede zwischen diesen beiden Befehlen

Die Antwort von @sepero zeigt Informationen an, die sich nur auf das UDEV-Gerät am Blattknoten beziehen.

Seperos Antwort

$ udevadm info -q all -n /dev/sda > udevadm_info_1.txt

slms antwort

Meine Antwort zeigt die Attribute, wie es die gesamte /sysKettenhierarchie von Geräten durchläuft.

$ udevadm info -q all -a /dev/sda > udevadm_info_2.txt

Sie können den Unterschied zwischen diesen beiden sehen.

$ diff -y udevadm_info_1.txt udevadm_info_2.txt  \
    > udevadm_info_diff.txt

HINWEIS: Ich verwende Fedora 19 mit Version 204 von udevadm:

$ udevadm --version
204
slm
quelle
Warum dieser komplexe Befehl eher als udevadm info -a -n /dev/sdb?
Gilles 'SO- hör auf böse zu sein'
@Gilles - Mit diesem Befehl werden alle ATTRS für alle übergeordneten Knoten ausgegeben.
SLM
Meins auch - die Ausgabe ist identisch.
Gilles 'SO- hör auf böse zu sein'
Gilles - Sie bei Debian? Welche Version von udevadm? Wenn ich die obigen 2 Befehle ausführe, erhalte ich diese 2 Dateien. Einzelne udevadm-Ausgabe vs. verschachtelte udevadm-Ausgabe . Beim Betrachten der Ausgabe denke ich, dass der einzelne Befehl nur die gesamte Ausgabe aller Eltern kombiniert, während meine Version zeigt, von welchen Eltern die ATTRS stammen.
SLM
pastebin.com/NHg9pydA ist die Ausgabe von udevadm info -q all, nicht von udevadm info -a. Ich denke -aist eine Abkürzung für -q all --attribute-walk. Oder ist das bei deiner Version anders? Ich erinnere mich nicht an diese Änderung, aber dann habe ich Fedora seit Jahren nicht mehr benutzt (aber warum sollte eine Distribution dies patchen?).
Gilles 'SO- hör auf böse zu sein'
5

udevadm info bietet diese Art von Informationen.

Wenn Sie das Subsystem speziell möchten:

udevadm info -n /dev/sdb -q property | sed -n 's/SUBSYSTEM=//p'

Wenn Sie udev-Regeln schreiben, ist der nützlichste Befehl

udevadm info -a -n /dev/sdb

Hiermit werden Regeln ausgedruckt, mit denen Sie das Gerät in udev-Regeln abgleichen können. Der erste Block befasst sich mit dem Gerät selbst, und die nachfolgenden Blöcke befassen sich mit seinen Vorfahren in der Gerätestruktur. Der einzige Nachteil ist, dass Sie keine Schlüssel mischen können, die unterschiedlichen Vorfahren entsprechen. Zum Beispiel diesen Auszug gegeben

KERNEL=="sdb"
SUBSYSTEM=="block"
…
KERNELS=="5:0:0:0"
SUBSYSTEMS=="scsi"
DRIVERS=="sd"
ATTRS{model}=="Yoyodyne Diskinator"
…
KERNELS=="0000:00:1f.2"
SUBSYSTEMS=="pci"
DRIVERS=="ahci"

dann können Sie dieses Gerät mit SUBSYSTEM=="block", SUBSYSTEMS=="scsi", ATTRS{model}="Yoyodyne Diskinator"oder mit, SUBSYSTEM=="block", SUBSYSTEMS=="pci", DRIVERS="ahci"aber nicht mit abstimmen SUBSYSTEM=="block", SUBSYSTEMS=="scsi", ATTRS{model}="Yoyodyne Diskinator", DRIVERS="ahci".

Eine andere Möglichkeit, Informationen zur Verwendung in Regeln abzurufen, ist mit

udevadm info -q property -n /dev/sdb --export

Hiermit werden Geräteeigenschaftswerte in der Form gedruckt, die Sie wie in udev-Regeln verwenden können.KEY=VALUEENV{KEY}=="VALUE"

Wenn Ihr Gerät keinen /devEintrag hat, können Sie /sysstattdessen mit einem Pfad unter darauf verweisen , z

udevadm info -a -p /sys/block/sdb

(In diesem Fall kein nützliches Beispiel. Dies ist nützlich für Geräte, deren Kategorie nicht allgemein ist und unter denen /devnoch kein Eintrag vorhanden ist.)

Wenn Sie udev-Regeln ändern, werden diese automatisch gelesen. Sie werden jedoch nur auf Geräte angewendet, die anschließend an das System angeschlossen werden. Verwenden Sie udevadm trigger(mit Optionen, um die Anwendung auf bestimmte Geräte zu beschränken), um die neuen Regeln auf ein bereits verbundenes Gerät anzuwenden .

Gilles 'SO - hör auf böse zu sein'
quelle
4
$ udevadm info -q all -n /dev/sdb
Sepero
quelle
Der Unterschied b / w dieser Ansatz und ich ist , dass dies zeigt nur der Blattknoten in /sysfür /dev/sdb. Der andere Ansatz zeigt die gesamte Baumhierarchie des Blattknotens zusammen mit den Zweigen.
SLM