我想根据 (USB) 设备所连接的端口来持久命名该设备。
使用 udevadmin 我发现了以下信息
# udevadm info --name=input/event3 | grep ID_PATH
E: ID_PATH=platform-ci_hdrc.1-usb-0:1.1.4:1.0
E: ID_PATH_TAG=platform-ci_hdrc_1-usb-0_1_1_4_1_0
所以设备似乎有属性 ID_PATH 和 ID_PATH_TAG,这看起来像我想要的。
我添加到匹配的 udev.rule
SYMLINK+="foo-%E{ID_PATH_TAG} foo1-$env{ID_PATH} foo2-$env{ID_PATH_TAG}"
(这 3 个变体只是拼命地尝试......一旦它起作用,一个就足够了。)
规则被执行并且日志中没有错误(日志级别 = 调试)。
但是,创建的符号链接称为
/dev/foo-
/dev/foo1-
/dev/foo2-
因此,当我的规则执行时,属性 ID_PATH 和 ID_PATH_TAG 似乎尚未设置。我需要注意任何订购吗?
答案1
首先运行此命令以获取设备的属性列表。
udevadm info -a -p $(udevadm info -q path -n <devpath>)
那么你可以做这样的事情
... SYMLINK+=”device_$attr{serial}”, ...
有时您必须使用所需的数据设置环境变量,如下所示。
... ENV{SERIAL_NUMBER}="$attr{serial_number}"
以后像这样使用它。
... SYMLINK+="device_$env{SERIAL_NUMBER}"
答案2
我看到使用 ID_PATH 的现有规则都是 60-* 或更高。我的评分是 45-*,除了历史原因之外没有什么特别的。
重命名我的规则文件表明是规则编号造成了差异:
59-foo.rules
: ID_PATH/ID_PATH_TAG 扩展为空字符串60-foo.rules
: ID_PATH/ID_PATH_TAG 扩展为空字符串61-foo.rules
: ID_PATH/ID_PATH_TAG 正确扩展
解释是60-persistent-input.rules
包含
SUBSYSTEMS=="pci|usb|platform|acpi", IMPORT{builtin}="path_id"
我找不到内置函数的文档,但我猜测内置的 path_id 将 ID_PATH/ID_PATH_TAG 放入环境中。