![udev 规则顺序和 link_priority](https://linux22.com/image/156766/udev%20%E8%A7%84%E5%88%99%E9%A1%BA%E5%BA%8F%E5%92%8C%20link_priority.png)
link_priority
udev 规则中的选项与规则处理顺序有何关系?例如,从默认的 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_priority
是0
,因此只要有一个 rtc 提供,hctosys
它就总是高于rtc0
的link_priority=-100
。
link_priority
请注意,在自定义文件中将规则更改为更高的规则10-custom.rules
将不起作用,因为它会被原始50-udev-default.rules
文件覆盖,因为它具有更高的文件编号。因此,在自定义规则文件名中使用大于 50 的数字。