为什么添加 ATTRS{serial} 后 udev 规则停止工作?

为什么添加 ATTRS{serial} 后 udev 规则停止工作?

我试图通过查看其他线程来解决我的问题,例如为什么我的 USB 端口修复 udev 规则不起作用udev 规则不适用于较少数量在其他几篇有关 udev 规则的帖子中,但我检查过的帖子都无法帮助我找出为什么会遇到此问题。

带有 bInterfaceNumber 的 udev 规则不起作用和我遇到的问题非常相似,本质上是一样的,但自 2013 年以来它一直没有答案,我想现在已经被遗忘了。

我有以下非常有效的规则:

SUBSYSTEM=="tty", SUBSYSTEMS=="usb-serial", DRIVERS=="mos7840", ATTRS{port_number}=="0", SYMLINK+="USB-RS232-0", MODE="0777"
SUBSYSTEM=="tty", SUBSYSTEMS=="usb-serial", DRIVERS=="mos7840", ATTRS{port_number}=="1", SYMLINK+="USB-RS232-1", MODE="0777"
SUBSYSTEM=="tty", SUBSYSTEMS=="usb-serial", DRIVERS=="ftdi_sio", ATTRS{port_number}=="0", SYMLINK+="USB-TTL-0", MODE="0777"

问题是我有 2 个相同的设备,两者属性的唯一区别是序列号,它们甚至具有相同的 VID/PID,因此我需要添加ATTRS{序列号}规则最终得到:

SUBSYSTEM=="tty", SUBSYSTEMS=="usb-serial", DRIVERS=="mos7840", ATTRS{port_number}=="0", SYMLINK+="USB-RS232-0", MODE="0777"
SUBSYSTEM=="tty", SUBSYSTEMS=="usb-serial", DRIVERS=="mos7840", ATTRS{port_number}=="1", SYMLINK+="USB-RS232-1", MODE="0777"
SUBSYSTEM=="tty", SUBSYSTEMS=="usb-serial", DRIVERS=="ftdi_sio", ATTRS{port_number}=="0", ATTRS{serial}=="AFYS1HLQ", SYMLINK+="USB-TTL-0", MODE="0777"
SUBSYSTEM=="tty", SUBSYSTEMS=="usb-serial", DRIVERS=="ftdi_sio", ATTRS{port_number}=="0", ATTRS{serial}=="FTV8IUSR", SYMLINK+="USB-TTL-1", MODE="0777"

因此添加后ATTRS{序列号}对于最后两条规则,则两者都停止工作。

为什么是这样?

谢谢!!

答案1

关键信息位于udev(7)手册页的这一段中(我强调):

ATTRS{filename}

向上搜索 devpath 以查找具有匹配 sysfs 属性值的设备。如果指定了多个ATTRS匹配,则所有匹配都必须在同一设备上匹配。除非指定的匹配值本身包含尾随空格,否则将忽略属性值中的尾随空格。

因此,如果您有多个ATTRS规则(如您所做的那样),则所有匹配的属性(文件名)都必须位于同一个设备目录中。

这不需要是与SUBSYSTEMSDRIVERS规则匹配的同一设备。

相关内容