Liệt kê tất cả các quy tắc udev (ví dụ cho một thiết bị)?


10

Tôi muốn biết làm thế nào tôi có thể liệt kê tất cả các quy tắc udev.

Tôi biết rằng trong chúng có thể được lưu trữ dưới dạng dòng (một dòng = một quy tắc) trong *.rulescác tệp trong các thư mục này

/etc/udev/rules.d
/lib/udev/rules.d
/run/udev/rules.d
/var/run/udev/rules.d

Do đó tôi mặc dù tôi có thể tìm thấy tất cả các quy tắc bằng cách đơn giản hóa tất cả các *.rulestệp trong các thư mục đó. Điều này dường như không hoạt động (vì một số quy tắc được thực thi mà tôi không thể tìm thấy bất kỳ phần mềm nào dưới dạng quy tắc trong các thư mục này).

Tốt nhất tôi nghĩ rằng có một lệnh cho giao diện udevadm sẽ cho phép tôi in ra tất cả các quy tắc mà udev hiện có.

Để chắc chắn, tôi đã đánh giá man udevadmvà đặc biệt là phần về udevadm info [parameters]dường như không mang lại bất kỳ kết quả nào.

Vì udev cho phép vô số tệp và quy tắc được nhắm mục tiêu cho cùng một thiết bị, thật bực bội khi không biết cách hiệu quả / khả thi để soạn thảo tất cả các quy tắc cho thiết bị.


4
Thật không may, nếu bạn đang sử dụng systemd, phiên bản udev của nó có một "sơ đồ đặt tên liên tục" phức tạp được mã hóa thành udevd , vì vậy bạn đã đúng, chỉ cần phân tích cú pháp rules.dcó thể để lại nhiều bí ẩn.
goldilocks

Câu trả lời:


11

Nếu bạn dùng:

udevadm monitor

bạn nhận được một mục cho mỗi hành động được thực hiện bởi KERNEL và UDEV. Điển hình là thêm, thay đổi, loại bỏ. Nếu bạn bao gồm --propertytùy chọn:

udevadm monitor --property

Bạn sẽ nhận được một danh sách các thuộc tính được sử dụng.


Như người ta có thể kiểm tra các quy tắc udev với udevadm:

udevadm test $(udevadm info -q path -n <device>)

người ta có thể kiểm tra một cái gì đó như thế này:

udevadm test $(udevadm info -q path -n <device>) 2>&1 | \
sed -n 's/.* \(\/[^ ]*\)\.rules:\([0-9]\+\)/\1.rules \2/p' | \
while read -r f n; do printf "%03d:%-50s " $n "$f"; sed -n ${n}p $f; done

nhưng không chắc nó đáng tin đến mức nào Dù sao đi nữa, sử dụng ví dụ video1cho <device>điều đó có thể mang lại một cái gì đó như:

031:/lib/udev/rules.d/50-udev-default.rules            SUBSYSTEM=="video4linux", GROUP="video"
007:/lib/udev/rules.d/60-persistent-v4l.rules          IMPORT{program}="v4l_id $devnode"
009:/lib/udev/rules.d/60-persistent-v4l.rules          SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id"
010:/lib/udev/rules.d/60-persistent-v4l.rules          KERNEL=="video*", ENV{ID_SERIAL}=="?*", SYMLINK+="v4l/by-id/$env{ID_BUS}-$env{ID_SERIAL}-video-index$attr{index}"
016:/lib/udev/rules.d/60-persistent-v4l.rules          IMPORT{builtin}="path_id"
017:/lib/udev/rules.d/60-persistent-v4l.rules          ENV{ID_PATH}=="?*", KERNEL=="video*|vbi*", SYMLINK+="v4l/by-path/$env{ID_PATH}-video-index$attr{index}"
015:/lib/udev/rules.d/73-seat-late.rules               TAG=="uaccess", ENV{MAJOR}!="", RUN{builtin}+="uaccess"
006:/etc/udev/rules.d/83-webcam.rules                  KERNEL=="video[0-9]", SUBSYSTEMS=="usb", ATTRS{idVendor}=="0c45", SYMLINK+="video-webcam1"

Nhưng đoán xem xét toàn bộ bài kiểm tra là tốt hơn. Cũng lưu ý tin nhắn:

Chương trình này chỉ dành cho gỡ lỗi, nó không chạy bất kỳ chương trình nào được chỉ định bởi khóa RUN. Nó có thể hiển thị kết quả không chính xác, bởi vì một số giá trị có thể khác hoặc không có sẵn khi chạy mô phỏng.


Bạn cũng có thể thiết lập

udev_log="debug"

vào udev.confvà khởi động lại udev ( reload udev) để có được đầu ra dài dòng hơn.

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.