Udev- Як дізнатися, до якої підсистеми належить пристрій?


19

Наприклад, у мене є пристрій / dev / sdb. Як дізнатись, що це підсистема udev?

Відповіді:


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

ПРИМІТКА: вищезазначені запити в базі даних UDEV щодо інформації про пристрої info, ми запитуємо всю інформацію -q all, і ми переглядаємо всі атрибути, /sysщо відносяться до цієї мітки пристрою.

витяг

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

Приклад

Ось мій /dev/sdaпристрій.

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

Відмінності між цими 2 командами

У відповіді @ sepero відображається інформація, що стосується пристрою UDEV на листковому вузлі.

Відповідь Сеперо

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

відповідь slm

У моїй відповіді показані атрибути, коли він охоплює всю /sysієрархію ланцюгів пристроїв.

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

Ви можете бачити різницю між цими двома.

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

ПРИМІТКА. Я працюю на Fedora 19, використовуючи версію 204 udevadm:

$ udevadm --version
204

Чому ця складна команда, а не udevadm info -a -n /dev/sdb?
Жил "ТАК - перестань бути злим"

@Gilles - це скидає всі ATTRS для всіх батьківських вузлів.
slm

Так само і моє - вихід однаковий.
Жиль "ТАК - перестань бути злим"

Жил - Ти на Дебіані? Яка версія udevadm? Коли я запускаю вищевказані команди, я отримую ці 2 файли. одинарний вихід udevadm проти вкладеного результату udevadm . Дивлячись на результат, я думаю, що одна команда просто поєднує всі результати всіх батьків, тоді як моя версія показує, від яких батьків походить ATTRS.
slm

pastebin.com/NHg9pydA - це вихід з udevadm info -q all, а не з udevadm info -a. Я думаю -a, що це ярлик для -q all --attribute-walk. Або це відрізняється у вашій версії? Я не пам’ятаю цього зміни, але тоді я не використовував Fedora роками (але навіщо дистрибутив це виправляти?).
Жил 'ТАК - перестань бути злим'

5

udevadm info надає такий вид інформації.

Якщо ви конкретно хочете підсистему:

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

Коли ви пишете правила udev, найкориснішою є команда

udevadm info -a -n /dev/sdb

Це виводить правила, які можна використовувати для узгодження пристрою з правилами udev. Перший блок стосується самого пристрою, а наступні блоки - про його предків у дереві пристроїв. Єдине застереження полягає в тому, що ви не можете змішувати клавіші, які відповідають різним предкам. Наприклад, враховуючи цей уривок

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"

то ви можете зрівняти цей пристрій з SUBSYSTEM=="block", SUBSYSTEMS=="scsi", ATTRS{model}="Yoyodyne Diskinator"або з, SUBSYSTEM=="block", SUBSYSTEMS=="pci", DRIVERS="ahci"але не з цим SUBSYSTEM=="block", SUBSYSTEMS=="scsi", ATTRS{model}="Yoyodyne Diskinator", DRIVERS="ahci".

Інший спосіб отримання інформації для використання в правилах - це с

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

Це друкує значення властивостей пристрою форми, яку ви можете використовувати як у правилах udev.KEY=VALUEENV{KEY}=="VALUE"

Якщо на вашому пристрої немає /devзапису, ви можете посилатися на нього за допомогою шляху /sys, напр

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

(не корисний приклад у цьому випадку - це корисно для пристроїв, категорія яких ще не є загальною, а в них ще немає запису /dev).

Коли ви змінюєте правила udev, вони читаються автоматично; однак вони застосовуються лише до пристроїв, які згодом підключені до системи. Щоб застосувати нові правила до вже підключеного пристрою, використовуйте udevadm trigger(з опціями для обмеження програми на певних пристроях).


4
$ udevadm info -q all -n /dev/sdb

Різниця ч / б цього підходу і мій в тому , що це показує тільки листової вузол в /sysпротягом /dev/sdb. Інший підхід показує всю ієрархію дерев яного листя разом із гілками.
slm
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.