为USB设备执行哪些udev规则?

时间:2015-01-02 11:04:26

标签: linux udev

我是udev的新手。 我需要看看插入linux机器的USB设备执行了哪些规则。 udev是否提供了任何日志记录?

2 个答案:

答案 0 :(得分:0)

这正是

udevadm trigger --verbose ...

会告诉你的。它会触发对udev规则的重新评估,您可以使用--subsystem-match--attr-match等其他标志来缩小USB设备的范围。

man udevadm

要查找USB设备的这些属性,请使用

lsusb -v

答案 1 :(得分:0)

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

的sym链接

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可能就足够了,但通常有通配符和默认的内置案例来完成大部分工作。

udevadm test 命令将按照在此事件期间处理它们的顺序(将USB键盘插入USB连接器的事件)告诉您所有规则。

parse_file 开头的行显示规则脚本文件,这些文件实际上按照它们被读取的顺序(e)udev挂钩(较低的数字前缀应该是第一个)。这通常是垃圾文件,所以暂时忽略它们。

udev_node_mknod 开头的行很有意思,因为当udev实际生成设备节点时。

udev_rules_apply_to_event 的行开头可能是您感兴趣的内容。它提供了规则脚本文件和规则行号,触发了udev中的一些更改。

所以这是我的输出。会有很多噪音(我省略了)但你仍然可以追踪并看到dev节点的创建

# 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]