Udev- Bagaimana cara mengetahui subsistem yang dimiliki perangkat?

19

Sebagai contoh, saya punya perangkat / dev / sdb. Bagaimana cara mengetahui itu subsistem udev?

Rucent88
sumber

Jawaban:

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

CATATAN: pertanyaan di atas menanyakan basis data UDEV untuk informasi perangkat info,, kami meminta semua informasi -q all,, dan kami sedang menjalankan semua atribut yang /sysberkaitan dengan label perangkat ini.

kutipan

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

Contoh

Ini /dev/sdaperangkat saya .

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

Perbedaan antara 2 perintah ini

Jawaban @ sepero menunjukkan informasi yang hanya berkaitan dengan perangkat UDEV di node leaf.

Jawaban Sepero

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

jawaban slm

Jawaban saya menunjukkan atribut saat berjalan di seluruh /syshierarki rantai perangkat.

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

Anda dapat melihat perbedaan antara keduanya.

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

CATATAN: Saya menjalankan Fedora 19, menggunakan versi 204 dari udevadm:

$ udevadm --version
204
slm
sumber
Mengapa perintah yang rumit ini bukan udevadm info -a -n /dev/sdb?
Gilles 'SANGAT berhenti menjadi jahat'
@Gilles - Yang ini membuang semua ATTRS untuk semua node induk.
slm
Begitu juga milik saya - hasilnya identik.
Gilles 'SO- stop being evil'
Gilles - Anda di Debian? Versi udevadm apa? Ketika saya menjalankan 2 perintah di atas saya mendapatkan 2 file ini. output udevadm tunggal vs output udevadm yang bersarang . Dalam melihat output, saya pikir perintah tunggal hanya menggabungkan semua output dari semua orang tua sementara versi saya menunjukkan dari orang tua mana ATTRS berasal.
slm
pastebin.com/NHg9pydA adalah output dari udevadm info -q all, bukan dari udevadm info -a. Saya pikir -aini jalan pintas untuk -q all --attribute-walk. Atau ini berbeda pada versi Anda? Saya tidak ingat perubahan ini, tapi saya sudah bertahun-tahun tidak menggunakan Fedora (tapi mengapa distribusi akan memperbaiki ini?).
Gilles 'SO- stop being evil'
5

udevadm info memberikan informasi semacam ini.

Jika Anda secara khusus menginginkan subsistem:

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

Saat Anda menulis aturan udev, perintah yang paling berguna adalah

udevadm info -a -n /dev/sdb

Ini mencetak aturan yang bisa Anda gunakan untuk mencocokkan perangkat dengan aturan udev. Blok pertama adalah tentang perangkat itu sendiri, dan blok berikutnya adalah tentang leluhurnya di pohon perangkat. Satu-satunya peringatan adalah bahwa Anda tidak dapat mencampur kunci yang sesuai dengan leluhur yang berbeda. Misalnya, diberikan kutipan ini

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"

maka Anda dapat mencocokkan perangkat ini dengan SUBSYSTEM=="block", SUBSYSTEMS=="scsi", ATTRS{model}="Yoyodyne Diskinator"atau dengan SUBSYSTEM=="block", SUBSYSTEMS=="pci", DRIVERS="ahci"tetapi tidak dengan SUBSYSTEM=="block", SUBSYSTEMS=="scsi", ATTRS{model}="Yoyodyne Diskinator", DRIVERS="ahci".

Cara lain untuk mendapatkan informasi untuk digunakan dalam aturan adalah dengan

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

Ini mencetak nilai properti perangkat dari formulir yang dapat Anda gunakan seperti dalam aturan udev.KEY=VALUEENV{KEY}=="VALUE"

Jika perangkat Anda tidak memiliki /deventri, Anda dapat merujuknya dengan jalur di bawahnya /sys, misalnya

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

(bukan contoh yang berguna dalam kasus ini - ini berguna untuk perangkat yang kategorinya belum umum dan belum memiliki entri di bawah /dev).

Saat Anda mengubah aturan udev, aturan itu dibaca secara otomatis; namun, mereka hanya diterapkan pada perangkat yang selanjutnya dicolokkan ke sistem. Untuk menerapkan aturan baru ke perangkat yang sudah terhubung, gunakan udevadm trigger(dengan opsi untuk membatasi aplikasi ke perangkat tertentu).

Gilles 'SANGAT berhenti menjadi jahat'
sumber
4
$ udevadm info -q all -n /dev/sdb
Sepero
sumber
Perbedaannya dengan pendekatan ini dan saya adalah bahwa ini menunjukkan hanya simpul daun /sysuntuk /dev/sdb. Pendekatan lain menunjukkan seluruh hierarki pohon dari simpul daun bersama dengan cabang.
slm