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 ที่โหนดโหนด

คำตอบของ Sepero

$ 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 'หยุดความชั่วร้าย'

@Gilles - อันนี้ทิ้ง ATTRS ทั้งหมดสำหรับโหนดพาเรนต์ทั้งหมด
slm

เช่นกันฉัน - เอาท์พุทเหมือนกัน
Gilles 'SO- หยุดความชั่วร้าย'

Gilles - คุณอยู่ใน Debian? udevadm รุ่นใด เมื่อฉันรันคำสั่ง 2 ข้อด้านบนฉันจะได้รับ 2 ไฟล์นี้ เอาท์พุท udevadm เดียวกับการส่งออก udevadm ซ้อนกัน ในการดูผลลัพธ์ฉันคิดว่าคำสั่งเดียวจะรวมเอาท์พุททั้งหมดของพาเรนต์ทั้งหมดในขณะที่เวอร์ชันของฉันแสดงว่าพาเรนต์ใดที่ ATTRS ได้รับมา
slm

pastebin.com/NHg9pydAคือผลลัพธ์จากไม่ได้มาจากudevadm info -q all udevadm info -aผมคิดว่าเป็นทางลัดสำหรับ-a -q all --attribute-walkหรือเวอร์ชั่นนี้แตกต่างจากเวอร์ชั่นของคุณหรือไม่ ฉันจำการเปลี่ยนแปลงนี้ไม่ได้ แต่แล้วฉันก็ไม่ได้ใช้ Fedora เป็นเวลาหลายปี
Gilles 'SO- หยุดความชั่วร้าย'

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

สิ่งนี้พิมพ์ค่าคุณสมบัติอุปกรณ์ของแบบฟอร์มที่คุณสามารถใช้ในกฎ udevKEY=VALUEENV{KEY}=="VALUE"

หากอุปกรณ์ของคุณไม่มี/devรายการคุณสามารถอ้างอิงได้ด้วยพา ธ ภายใต้/sysแทนเช่น

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

(ไม่ใช่ตัวอย่างที่มีประโยชน์ในกรณีนี้ - เป็นประโยชน์สำหรับอุปกรณ์ที่หมวดหมู่ไม่ได้เป็นแบบทั่วไปและยังไม่มีรายการภายใต้/dev)

เมื่อคุณเปลี่ยนกฎ udev พวกเขาจะอ่านโดยอัตโนมัติ อย่างไรก็ตามจะใช้กับอุปกรณ์ที่ต่อเข้ากับระบบในภายหลังเท่านั้น หากต้องการใช้กฎใหม่กับอุปกรณ์ที่เชื่อมต่ออยู่แล้วให้ใช้udevadm trigger(พร้อมตัวเลือกเพื่อ จำกัด แอปพลิเคชันกับอุปกรณ์บางอย่าง)


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

ความแตกต่าง b / w วิธีนี้และเหมืองคือว่าการแสดงนี้เป็นเพียงแค่ใบเหลืองในสำหรับ/sys /dev/sdbวิธีอื่นแสดงลำดับชั้นต้นไม้ทั้งหมดของโหนดใบพร้อมกับสาขา
slm
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.