【发布时间】:2015-01-02 11:04:25
【问题描述】:
我是 udev 的新手。 我需要查看插入 linux 机器的 USB 设备执行了哪些规则。 udev 是否提供任何日志记录?
【问题讨论】:
我是 udev 的新手。 我需要查看插入 linux 机器的 USB 设备执行了哪些规则。 udev 是否提供任何日志记录?
【问题讨论】:
原来是这样
udevadm trigger --verbose ...
会告诉你的。它将触发对 udev 规则的重新评估,您可以使用 --subsystem-match 和 --attr-match 等其他标志来缩小 USB 设备的范围。
要查找 USB 设备的这些属性,请使用
lsusb -v
【讨论】:
尝试类似:udevadm test /dev/bus/usb/001/045
【讨论】:
udevadm test ... 显示的所有文件都会为每个设备读取。但是,每个设备只使用每个文件中的匹配行。
Carlqvist 的回答是正确的,但它忽略了大部分细节。 来自一个真实的案例......
问题: 我的 USB 键盘在我的 gNewsense 设置中工作,但在我的 SourceMage 中工作。所以接下来是我试图弄清楚 gNewsense 中的哪些 udev 规则适用于这个键盘。
1) 获取基本信息
# lsusb
[...omitted...]
Bus 007 Device 006: ID 413c:2003 Dell Computer Corp. Keyboard
[...omitted...]
所以现在我知道了……
USB设备节点(与键盘设备不同)是/dev/bus/usb/007/006 idVendor=413c 和 idProduct=2003 如果键盘没有任何徽标或印章,我将有人类友好的文本可供搜索。
现在,键盘和鼠标都在 /dev/input/* 下,这只是你必须知道或从网页中看到的东西。我很幸运,有 /dev/input/by-id/usb-Dell_Dell_USB_Keyboard-event-kbd
在我的例子中,它是指向 /dev/input/event0 的符号链接
2) 这将获得键盘的“其他”设备路径(内核或 udev 内部)
# udevadm info --query=path --name=/dev/input/by-id/usb-Dell_Dell_USB_Keyboard-event-kbd
/devices/pci0000:00/0000:00:1d.1/usb7/7-1/7-1:1.0/input/input9/event0
3) 现在,让这个键盘工作的规则是什么?
请注意,对 idVendor 和 idProduct 进行 grep'ing 可能就足够了,但通常有通配符和默认内置案例可以完成大部分工作。
udevadm test 命令将按照事件(将 USB 键盘插入 USB 连接器的事件)期间的处理顺序告诉您所有规则。
以 parse_file 开头的行向您显示了实际连接到 (e)udev 的规则脚本文件,按它们被读取的顺序(较低的数字前缀应该在前)。这通常是一个垃圾文件,所以暂时忽略它们。
以 udev_node_mknod 开头的行很有趣,因为那是 udev 实际创建设备节点的时候。
以 udev_rules_apply_to_event 开头的行可能是您感兴趣的内容。它提供了规则脚本文件和触发 udev 某些更改的规则行号。
这是我的输出。会有很多噪音(我已经省略了),但您仍然可以追踪并查看开发节点的创建
# udevadm test /devices/pci0000:00/0000:00:1d.1/usb7/7-1/7-1:1.0/input/input9/event0
[...]
parse_file: reading '/lib/udev/rules.d/69-cd-sensors.rules' as rules file
add_rule: IMPORT found builtin 'usb_id', replacing /lib/udev/rules.d/69-cd-sensors.rules:78
[...]
udev_rules_apply_to_event: IMPORT builtin 'input_id' /lib/udev/rules.d/50-udev-default.rules:4
[...]
udev_builtin_add_property: ID_INPUT_KEY=1
udev_builtin_add_property: ID_INPUT_KEYBOARD=1
[...]
udev_rules_apply_to_event: IMPORT builtin 'usb_id' /lib/udev/rules.d/60-persistent-input.rules:7
builtin_usb_id: /sys/devices/pci0000:00/0000:00:1d.1/usb7/7-1/7-1:1.0: if_class 3 protocol 0
udev_builtin_add_property: ID_VENDOR=Dell
udev_builtin_add_property: ID_VENDOR_ENC=Dell
udev_builtin_add_property: ID_VENDOR_ID=413c
udev_builtin_add_property: ID_MODEL=Dell_USB_Keyboard
udev_builtin_add_property: ID_MODEL_ENC=Dell\x20USB\x20Keyboard
udev_builtin_add_property: ID_MODEL_ID=2003
[...]
udev_rules_apply_to_event: LINK 'input/by-id/usb-Dell_Dell_USB_Keyboard-event-kbd' /lib/udev/rules.d/60-persistent-input.rules:24
udev_rules_apply_to_event: IMPORT builtin 'path_id' /lib/udev/rules.d/60-persistent-input.rules:31
udev_builtin_add_property: ID_PATH=pci-0000:00:1d.1-usb-0:1:1.0
udev_builtin_add_property: ID_PATH_TAG=pci-0000_00_1d_1-usb-0_1_1_0
udev_rules_apply_to_event: LINK 'input/by-path/pci-0000:00:1d.1-usb-0:1:1.0-event-kbd' /lib/udev/rules.d/60-persistent-input.rules:33
udev_rules_apply_to_event: IMPORT builtin skip 'usb_id' /lib/udev/rules.d/95-keymap.rules:13
udev_event_execute_rules: no node name set, will use kernel supplied name 'input/event0'
udev_node_add: creating device node '/dev/input/event0', devnum=13:64, mode=01600, uid=0, gid=0
udev_node_mknod: preserve file '/dev/input/event0', because it has correct dev_t
udev_node_mknod: preserve permissions /dev/input/event0, 021600, uid=0, gid=0
node_symlink: preserve already existing symlink '/dev/char/13:64' to '../input/event0'
link_find_prioritized: found 'c13:64' claiming '/run/udev/links/input\x2fby-id\x2fusb-Dell_Dell_USB_Keyboard-event-kbd'
link_update: creating link '/dev/input/by-id/usb-Dell_Dell_USB_Keyboard-event-kbd' to '/dev/input/event0'
node_symlink: preserve already existing symlink '/dev/input/by-id/usb-Dell_Dell_USB_Keyboard-event-kbd' to '../event0'
link_find_prioritized: found 'c13:64' claiming '/run/udev/links/input\x2fby-path\x2fpci-0000:00:1d.1-usb-0:1:1.0-event-kbd'
link_update: creating link '/dev/input/by-path/pci-0000:00:1d.1-usb-0:1:1.0-event-kbd' to '/dev/input/event0'
node_symlink: preserve already existing symlink '/dev/input/by-path/pci-0000:00:1d.1-usb-0:1:1.0-event-kbd' to '../event0'
udev_device_update_db: created db file '/run/udev/data/c13:64' for '/devices/pci0000:00/0000:00:1d.1/usb7/7-1/7-1:1.0/input/input9/event0'
.INPUT_CLASS=kbd
ACTION=add
[...]
[end]
【讨论】:
udevadm 可以使用 --debug 标志调用以获得额外的行。所以像这样:udevadm --debug test /devices/pci0....