udev 规则顺序和 link_priority

udev 规则顺序和 link_priority

link_priorityudev 规则中的选项与规则处理顺序有何关系?例如,从默认的 udev 规则中获取以下代码片段:

50-udev-default.rules:

# select "system RTC" or just use the first one
SUBSYSTEM=="rtc", ATTR{hctosys}=="1", SYMLINK+="rtc"
SUBSYSTEM=="rtc", KERNEL=="rtc0", SYMLINK+="rtc", OPTIONS+="link_priority=-100"

这将创建一个指向 RTC 设备的 /dev/rtc 符号链接,该设备具有hctosys属性集,即提供系统时间的设备。或者,如果没有 RTC 设备提供系统时间,则只会选择/dev/rtc0.

现在假设我们颠倒顺序。我们甚至可以将它们拆分为单独的文件:

10-custom.rules:
SUBSYSTEM=="rtc", KERNEL=="rtc0", SYMLINK+="rtc", OPTIONS+="link_priority=-100"

[...]

50-udev-default.rules:
SUBSYSTEM=="rtc", ATTR{hctosys}=="1", SYMLINK+="rtc"

这相当于第一个版本吗?或者这会导致第一个符号链接被创建到/dev/rtc0,然后用第二个符号链接覆盖到提供系统时间的任何 RTC 设备(假设它与 rtc0 不同)?

答案1

/lib/udev/rules.d/50-udev-default.rules是的,无论是在原始文件中还是在单独的文件中颠倒顺序,颠倒顺序都是等效的、独立的/etc/udev/rules.d/10-custom.rules

在这种情况下定义符号链接的是link_priority值。默认值link_priority0,因此只要有一个 rtc 提供,hctosys它就总是高于rtc0link_priority=-100

link_priority请注意,在自定义文件中将规则更改为更高的规则10-custom.rules将不起作用,因为它会被原始50-udev-default.rules文件覆盖,因为它具有更高的文件编号。因此,在自定义规则文件名中使用大于 50 的数字。

相关内容