Udev- Làm cách nào để tìm ra thiết bị con thuộc về thiết bị con nào?


19

Ví dụ: tôi có thiết bị / dev / sdb. Làm thế nào để tôi tìm ra hệ thống con udev?

Câu trả lời:


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

LƯU Ý: các truy vấn trên cơ sở dữ liệu UDEV về thông tin thiết bị info, chúng tôi đang truy vấn tất cả thông tin -q allvà chúng tôi đang đi bộ tất cả các thuộc tính /sysliên quan đến nhãn thiết bị này.

đoạn trích

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

Thí dụ

Đây là /dev/sdathiết bị của tôi .

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

Sự khác nhau giữa 2 lệnh này

Câu trả lời của @ sepero đang hiển thị thông tin chỉ liên quan đến thiết bị UDEV tại nút lá.

Câu trả lời của Sepero

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

câu trả lời của slm

Câu trả lời của tôi cho thấy các thuộc tính khi nó đi qua toàn bộ /sysphân cấp chuỗi của thiết bị.

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

Bạn có thể thấy sự khác biệt giữa hai.

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

LƯU Ý: Tôi đang chạy trên Fedora 19, sử dụng phiên bản 204 của udevadm:

$ udevadm --version
204

Tại sao lệnh này phức tạp hơn udevadm info -a -n /dev/sdb?
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles - Cái này bỏ tất cả ATTRS cho tất cả các nút cha.
slm

Của tôi cũng vậy - đầu ra là giống hệt nhau.
Gilles 'SO- ngừng trở nên xấu xa'

Gilles - Bạn trên Debian? Phiên bản nào của udevadm? Khi tôi chạy 2 lệnh trên tôi nhận được 2 tệp này. đầu ra udevadm đơn so với đầu ra udevadm lồng nhau . Khi nhìn vào đầu ra, tôi nghĩ rằng lệnh đơn lẻ chỉ là kết hợp tất cả đầu ra của tất cả các cha mẹ trong khi phiên bản của tôi cho thấy ATTRS của cha mẹ nào xuất phát từ đó.
slm

pastebin.com/NHg9pydA là đầu ra từ udevadm info -q all, không phải từ udevadm info -a. Tôi nghĩ -alà một phím tắt cho -q all --attribute-walk. Hoặc điều này là khác nhau trên phiên bản của bạn? Tôi không nhớ sự thay đổi này, nhưng sau đó tôi đã không sử dụng Fedora trong nhiều năm (nhưng tại sao một bản phân phối sẽ vá điều này?).
Gilles 'SO- ngừng trở nên xấu xa'

5

udevadm info cung cấp loại thông tin này.

Nếu bạn đặc biệt muốn hệ thống con:

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

Khi bạn viết quy tắc udev, lệnh hữu ích nhất là

udevadm info -a -n /dev/sdb

Điều này in ra các quy tắc mà bạn có thể sử dụng để khớp với thiết bị trong các quy tắc udev. Khối đầu tiên là về chính thiết bị và các khối tiếp theo là về tổ tiên của nó trong cây thiết bị. Nhắc nhở duy nhất là bạn không thể trộn các phím tương ứng với các tổ tiên khác nhau. Ví dụ, đưa ra đoạn trích này

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"

sau đó bạn có thể kết hợp thiết bị này với SUBSYSTEM=="block", SUBSYSTEMS=="scsi", ATTRS{model}="Yoyodyne Diskinator"hoặc với SUBSYSTEM=="block", SUBSYSTEMS=="pci", DRIVERS="ahci"nhưng không với SUBSYSTEM=="block", SUBSYSTEMS=="scsi", ATTRS{model}="Yoyodyne Diskinator", DRIVERS="ahci".

Một cách khác để có được thông tin để sử dụng trong các quy tắc là với

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

Điều này in các giá trị thuộc tính thiết bị của biểu mẫu mà bạn có thể sử dụng như trong quy tắc udev.KEY=VALUEENV{KEY}=="VALUE"

Nếu thiết bị của bạn không có /devmục, thay vào đó, bạn có thể tham khảo thiết bị có đường dẫn bên dưới /sys, ví dụ:

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

(không phải là một ví dụ hữu ích trong trường hợp này - điều này hữu ích cho các thiết bị có danh mục không phổ biến và chưa có mục /devnào).

Khi bạn thay đổi quy tắc udev, chúng sẽ được đọc tự động; tuy nhiên, chúng chỉ được áp dụng cho các thiết bị sau đó được cắm vào hệ thống. Để áp dụng các quy tắc mới cho một thiết bị đã được kết nối, hãy sử dụng udevadm trigger(với các tùy chọn để giới hạn ứng dụng cho một số thiết bị nhất định).


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

Sự khác biệt b / w phương pháp này và tôi là chương trình này chỉ là nút lá trong /syscho /dev/sdb. Cách tiếp cận khác cho thấy toàn bộ hệ thống phân cấp cây của nút lá cùng với các nhánh.
slm
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.