我正在研究活性氧在下面乌班图14.04在一个奥德罗伊XU3(ARM 开发板)。
我将两个 USB 设备连接到我的开发板,它们被识别为ttyACM0和ttyACM1根据它们连接的时间。
由于这些设备(Arduino 和 PixHawk)具有不同的 PID / VID,我想将它们绑定到某个“自定义名称”tty,例如tty控制器0&tty位置0例如。
根据这个主题,我们可以根据 PID 和 VID 来模拟链接设备ttyUSB0。
我应该如何模拟链接到确定性名称?/etc/udev/rules.d/99-custom.rules
simlink中的 4 条规则可以工作吗?
ACTION=="add", ATTRS{idVendor}=="0123", ATTRS{idProduct}=="0001", RUN+="/bin/ln -s /dev/ttyACM0 /dev/ttyController"
ACTION=="remove", ATTRS{idVendor}=="0123", ATTRS{idProduct}=="0001", RUN+="/bin/rm /dev/ttyController"
ACTION=="add", ATTRS{idVendor}=="3210", ATTRS{idProduct}=="0002", RUN+="/bin/ln -s /dev/ttyACM0 /dev/ttyPosition"
ACTION=="remove", ATTRS{idVendor}=="3210", ATTRS{idProduct}=="0002", RUN+="/bin/rm /dev/ttyPosition"
或者我可以将 Udev 与自定义 PID 和 VID 一起使用吗?
答案1
您的配置应该基本上可以工作,但我想提出一些建议:
首先,我认为你想使用ATTR
,而不是ATTRS
。 ATTRS
向上搜索整个设备树以找到匹配的(父)设备。这很可能不是您想要的。使用ATTR
实际触发事件的设备必须具有指定的属性。
其次,由于创建设备节点的符号链接是一项相当常见的任务,因此有一个专门的语句来执行此操作,即SYMLINK+="newname"
.这样您就不会依赖“外部”命令。更重要的是,通过使用此指令,您只需要匹配“add”事件,因为udevd
当设备消失时会自动删除关联的符号链接。
因此,你的规则应该是
ACTION=="add", ATTR{idVendor}=="0123", ATTR{idProduct}=="0001", SYMLINK+="ttyController"
ACTION=="add", ATTR{idVendor}=="3210", ATTR{idProduct}=="0002", SYMLINK+="ttyPosition"
最后,我建议通过添加进一步的 SUBSYSTEM 约束来缩小匹配范围,即添加SUBSYSTEM=="usb"
.由于设备和供应商 ID 仅(希望)在其范围内是唯一的,因此忽略子系统匹配可能会导致您的规则在其他设备类(如 PCI 设备)上匹配。尽管这种情况不太可能发生,但它在 udev 规则中通常被视为良好的风格:
SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="0123", ATTR{idProduct}=="0001", SYMLINK+="ttyController"
SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="3210", ATTR{idProduct}=="0002", SYMLINK+="ttyPosition"