通过udev规则修改串口名字
对于第三方串口卡来说,它的名字不是标准串口的 ttyS? 形式。有时候,客户会要求修改串口名字,我们可以通过udev rule来达到这个目的,编写一个 80-serial-port-rename.rules 文件(文件其实可以随便命名,只要扩展名保持.rules),放到 /etc/udev/rules.d/ 目录下,文件的内容如下:
-
ACTION=="add" KERNEL=="ttyUSB0" SUBSYSTEM=="tty" NAME="ttyS4"
-
ACTION=="add" KERNEL=="ttyUSB1" SUBSYSTEM=="tty" NAME="ttyS5"
-
ACTION=="add" KERNEL=="ttyUSB2" SUBSYSTEM=="tty" NAME="ttyS6"
-
ACTION=="add" KERNEL=="ttyUSB3" SUBSYSTEM=="tty" NAME="ttyS7"
也可以保留原始的串口名字,给每个串口创建一个符号链接:
-
ACTION=="add" KERNEL=="ttyUSB0" SUBSYSTEM=="tty" SYMLINK+="ttyS4"
-
ACTION=="add" KERNEL=="ttyUSB1" SUBSYSTEM=="tty" SYMLINK+="ttyS5"
-
ACTION=="add" KERNEL=="ttyUSB2" SUBSYSTEM=="tty" SYMLINK+="ttyS6"
-
ACTION=="add" KERNEL=="ttyUSB3" SUBSYSTEM=="tty" SYMLINK+="ttyS7"
注意:通过udev rule修改串口名字只是改变了应用程序打开串口时使用的设备节点名字(/dev/ttyS?),kernel(driver)那边其实名字并没有改变,dmesg的log里面还是原来的旧名字;/sys/class/tty/ 目录下也还是旧名字。
有客户提出,需要固定串口的名字。客户的系统上面将使用两张同类型的串口卡,固定插在两个相邻的槽位。客户希望,这两个槽位上的串口名字固定,不管另外一块串口卡有没有插。
要实现这个需求,首先要求BIOS为每个槽位上的卡片分配固定的PCI bus number、device number 和function number。然后就可以通过udev rule来给串口卡重命名:
-
#1st Serial adapter
-
ACTION=="add" KERNEL=="ttyXR0" KERNELS=="0000:02:0b.0" SUBSYSTEM=="tty" NAME="ttyS4"
-
ACTION=="add" KERNEL=="ttyXR1" KERNELS=="0000:02:0b.0" SUBSYSTEM=="tty" NAME="ttyS5"
-
ACTION=="add" KERNEL=="ttyXR2" KERNELS=="0000:02:0b.0" SUBSYSTEM=="tty" NAME="ttyS6"
-
ACTION=="add" KERNEL=="ttyXR3" KERNELS=="0000:02:0b.0" SUBSYSTEM=="tty" NAME="ttyS7"
-
-
#2nd Serial adapter (When the 1st serial adapter is installed)
-
ACTION=="add" KERNEL=="ttyXR4" KERNELS=="0000:02:0c.0" SUBSYSTEM=="tty" NAME="ttyS8"
-
ACTION=="add" KERNEL=="ttyXR5" KERNELS=="0000:02:0c.0" SUBSYSTEM=="tty" NAME="ttyS9"
-
ACTION=="add" KERNEL=="ttyXR6" KERNELS=="0000:02:0c.0" SUBSYSTEM=="tty" NAME="ttyS10"
-
ACTION=="add" KERNEL=="ttyXR7" KERNELS=="0000:02:0c.0" SUBSYSTEM=="tty" NAME="ttyS11"
-
-
#2nd Serial adapter (When the 1st serial adapter is removed)
-
ACTION=="add" KERNEL=="ttyXR0" KERNELS=="0000:02:0c.0" SUBSYSTEM=="tty" NAME="ttyS8"
-
ACTION=="add" KERNEL=="ttyXR1" KERNELS=="0000:02:0c.0" SUBSYSTEM=="tty" NAME="ttyS9"
-
ACTION=="add" KERNEL=="ttyXR2" KERNELS=="0000:02:0c.0" SUBSYSTEM=="tty" NAME="ttyS10"
-
ACTION=="add" KERNEL=="ttyXR3" KERNELS=="0000:02:0c.0" SUBSYSTEM=="tty" NAME="ttyS11"
注意:当第一张串口卡移除的时候,driver给第二张串口卡分配的名字(就是 KERNEL=="tty???"那部分)会变;所以,规则要写两遍,以应对不同的情况。
阅读(6958) | 评论(0) | 转发(0) |