Udev - Jak dowiedzieć się, do którego podsystemu należy urządzenie?

19

Na przykład mam urządzenie / dev / sdb. Jak mogę się dowiedzieć, że jest to podsystem udev?

Rucent88
źródło

Odpowiedzi:

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

UWAGA: powyższe zapytania do bazy danych UDEV w celu uzyskania informacji o urządzeniu, infosprawdzamy wszystkie informacje -q alli chodzimy po wszystkich atrybutach /syszwiązanych z tą etykietą urządzenia.

fragment

   --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.

Przykład

Oto moje /dev/sdaurządzenie.

$ 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':

Różnice między tymi 2 poleceniami

Odpowiedź @ sepero pokazuje informacje dotyczące tylko urządzenia UDEV w węźle liścia.

Odpowiedź Sepero

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

odpowiedź SLM

Moja odpowiedź pokazuje atrybuty, gdy chodzi po całej /syshierarchii łańcuchowej urządzeń.

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

Możesz zobaczyć różnicę między tymi dwoma.

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

UWAGA: Korzystam z Fedory 19, używając wersji 204 udevadm:

$ udevadm --version
204
slm
źródło
Dlaczego to złożone polecenie zamiast udevadm info -a -n /dev/sdb?
Gilles 'SO - przestań być zły'
@Gilles - Ten zrzuca wszystkie ATTRS dla wszystkich węzłów nadrzędnych.
slm
Podobnie moje - wynik jest identyczny.
Gilles „SO- przestań być zły”
Gilles - Jesteś na Debianie? Jaka wersja udevadm? Po uruchomieniu powyższych 2 poleceń otrzymuję te 2 pliki. pojedyncze wyjście udevadm vs. zagnieżdżone wyjście udevadm . Patrząc na dane wyjściowe, myślę, że pojedyncze polecenie po prostu łączy wszystkie dane wyjściowe wszystkich rodziców, podczas gdy moja wersja pokazuje, z których rodziców pochodzą ATTRS.
slm
pastebin.com/NHg9pydA jest wyjściem z udevadm info -q all, a nie z udevadm info -a. Myślę, że -ato skrót -q all --attribute-walk. Czy jest inaczej w twojej wersji? Nie pamiętam tej zmiany, ale potem nie korzystałem z Fedory od lat (ale dlaczego miałaby to łatać dystrybucja?).
Gilles „SO- przestań być zły”
5

udevadm info zapewnia tego rodzaju informacje.

Jeśli konkretnie chcesz podsystem:

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

Podczas pisania reguł udev najbardziej przydatne jest polecenie

udevadm info -a -n /dev/sdb

Spowoduje to wydrukowanie reguł, których można użyć do dopasowania urządzenia w regułach udev. Pierwszy blok dotyczy samego urządzenia, a kolejne bloki dotyczą jego przodków w drzewie urządzeń. Jedynym zastrzeżeniem jest to, że nie można mieszać kluczy odpowiadających różnym przodkom. Na przykład, biorąc pod uwagę ten fragment

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"

możesz dopasować to urządzenie do SUBSYSTEM=="block", SUBSYSTEMS=="scsi", ATTRS{model}="Yoyodyne Diskinator"lub z, SUBSYSTEM=="block", SUBSYSTEMS=="pci", DRIVERS="ahci"ale nie z SUBSYSTEM=="block", SUBSYSTEMS=="scsi", ATTRS{model}="Yoyodyne Diskinator", DRIVERS="ahci".

Innym sposobem na uzyskanie informacji do wykorzystania w regułach jest

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

Wyświetla wartości właściwości urządzenia w postaci, której można używać jak w regułach udev.KEY=VALUEENV{KEY}=="VALUE"

Jeśli twoje urządzenie nie ma /devwpisu, możesz odwołać się do niego pod ścieżką /sys, np

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

(nie jest to przydatny przykład w tym przypadku - jest to przydatne na urządzeniach, których kategoria nie jest powszechna i nie ma jeszcze żadnego wpisu poniżej /dev).

Po zmianie reguł udev są one odczytywane automatycznie; są one jednak stosowane tylko do urządzeń, które są następnie podłączane do systemu. Aby zastosować nowe reguły do ​​już podłączonego urządzenia, użyj udevadm trigger(z opcjami ograniczenia aplikacji do niektórych urządzeń).

Gilles „SO- przestań być zły”
źródło
4
$ udevadm info -q all -n /dev/sdb
Sepero
źródło
Różnica między tym podejściem a moim polega na tym, że pokazuje on tylko węzeł liścia /sysdla /dev/sdb. Drugie podejście pokazuje całą hierarchię drzewa węzła liścia wraz z gałęziami.
slm