ตัวอย่างเช่นฉันมีอุปกรณ์ / dev / sdb ฉันจะรู้ได้อย่างไรว่ามันเป็นระบบย่อยของ udev
ตัวอย่างเช่นฉันมีอุปกรณ์ / dev / sdb ฉันจะรู้ได้อย่างไรว่ามันเป็นระบบย่อยของ udev
คำตอบ:
$ 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':
คำตอบของ @ sepero กำลังแสดงข้อมูลที่เกี่ยวข้องกับอุปกรณ์ UDEV ที่โหนดโหนด
$ udevadm info -q all -n /dev/sda > udevadm_info_1.txt
คำตอบของฉันแสดงคุณลักษณะขณะที่เดิน/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 -q all
udevadm info -a
ผมคิดว่าเป็นทางลัดสำหรับ-a
-q all --attribute-walk
หรือเวอร์ชั่นนี้แตกต่างจากเวอร์ชั่นของคุณหรือไม่ ฉันจำการเปลี่ยนแปลงนี้ไม่ได้ แต่แล้วฉันก็ไม่ได้ใช้ Fedora เป็นเวลาหลายปี
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=VALUE
ENV{KEY}=="VALUE"
หากอุปกรณ์ของคุณไม่มี/dev
รายการคุณสามารถอ้างอิงได้ด้วยพา ธ ภายใต้/sys
แทนเช่น
udevadm info -a -p /sys/block/sdb
(ไม่ใช่ตัวอย่างที่มีประโยชน์ในกรณีนี้ - เป็นประโยชน์สำหรับอุปกรณ์ที่หมวดหมู่ไม่ได้เป็นแบบทั่วไปและยังไม่มีรายการภายใต้/dev
)
เมื่อคุณเปลี่ยนกฎ udev พวกเขาจะอ่านโดยอัตโนมัติ อย่างไรก็ตามจะใช้กับอุปกรณ์ที่ต่อเข้ากับระบบในภายหลังเท่านั้น หากต้องการใช้กฎใหม่กับอุปกรณ์ที่เชื่อมต่ออยู่แล้วให้ใช้udevadm trigger
(พร้อมตัวเลือกเพื่อ จำกัด แอปพลิเคชันกับอุปกรณ์บางอย่าง)
$ udevadm info -q all -n /dev/sdb
/sys
/dev/sdb
วิธีอื่นแสดงลำดับชั้นต้นไม้ทั้งหมดของโหนดใบพร้อมกับสาขา
udevadm info -a -n /dev/sdb
?