udev 无法使用 ID_PATH 创建持久命名的符号链接

udev 无法使用 ID_PATH 创建持久命名的符号链接

我想根据 (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-*,除了历史原因之外没有什么特别的。

重命名我的规则文件表明是规则编号造成了差异:

  1. 59-foo.rules: ID_PATH/ID_PATH_TAG 扩展为空字符串
  2. 60-foo.rules: ID_PATH/ID_PATH_TAG 扩展为空字符串
  3. 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 放入环境中。

相关内容