通过udev规则修改串口名字

7500阅读 0评论2015-11-17 seaquester
分类:LINUX

通过udev规则修改串口名字

对于第三方串口卡来说,它的名字不是标准串口的 ttyS? 形式。有时候,客户会要求修改串口名字,我们可以通过udev rule来达到这个目的,编写一个 80-serial-port-rename.rules 文件(文件其实可以随便命名,只要扩展名保持.rules),放到 /etc/udev/rules.d/ 目录下,文件的内容如下:

  1. ACTION=="add" KERNEL=="ttyUSB0" SUBSYSTEM=="tty" NAME="ttyS4"
  2. ACTION=="add" KERNEL=="ttyUSB1" SUBSYSTEM=="tty" NAME="ttyS5"
  3. ACTION=="add" KERNEL=="ttyUSB2" SUBSYSTEM=="tty" NAME="ttyS6"
  4. ACTION=="add" KERNEL=="ttyUSB3" SUBSYSTEM=="tty" NAME="ttyS7"

也可以保留原始的串口名字,给每个串口创建一个符号链接:

  1. ACTION=="add" KERNEL=="ttyUSB0" SUBSYSTEM=="tty" SYMLINK+="ttyS4"
  2. ACTION=="add" KERNEL=="ttyUSB1" SUBSYSTEM=="tty" SYMLINK+="ttyS5"
  3. ACTION=="add" KERNEL=="ttyUSB2" SUBSYSTEM=="tty" SYMLINK+="ttyS6"
  4. 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来给串口卡重命名:
  1. #1st Serial adapter
  2. ACTION=="add" KERNEL=="ttyXR0" KERNELS=="0000:02:0b.0" SUBSYSTEM=="tty" NAME="ttyS4"
  3. ACTION=="add" KERNEL=="ttyXR1" KERNELS=="0000:02:0b.0" SUBSYSTEM=="tty" NAME="ttyS5"
  4. ACTION=="add" KERNEL=="ttyXR2" KERNELS=="0000:02:0b.0" SUBSYSTEM=="tty" NAME="ttyS6"
  5. ACTION=="add" KERNEL=="ttyXR3" KERNELS=="0000:02:0b.0" SUBSYSTEM=="tty" NAME="ttyS7"

  6. #2nd Serial adapter (When the 1st serial adapter is installed)
  7. ACTION=="add" KERNEL=="ttyXR4" KERNELS=="0000:02:0c.0" SUBSYSTEM=="tty" NAME="ttyS8"
  8. ACTION=="add" KERNEL=="ttyXR5" KERNELS=="0000:02:0c.0" SUBSYSTEM=="tty" NAME="ttyS9"
  9. ACTION=="add" KERNEL=="ttyXR6" KERNELS=="0000:02:0c.0" SUBSYSTEM=="tty" NAME="ttyS10"
  10. ACTION=="add" KERNEL=="ttyXR7" KERNELS=="0000:02:0c.0" SUBSYSTEM=="tty" NAME="ttyS11"

  11. #2nd Serial adapter (When the 1st serial adapter is removed)
  12. ACTION=="add" KERNEL=="ttyXR0" KERNELS=="0000:02:0c.0" SUBSYSTEM=="tty" NAME="ttyS8"
  13. ACTION=="add" KERNEL=="ttyXR1" KERNELS=="0000:02:0c.0" SUBSYSTEM=="tty" NAME="ttyS9"
  14. ACTION=="add" KERNEL=="ttyXR2" KERNELS=="0000:02:0c.0" SUBSYSTEM=="tty" NAME="ttyS10"
  15. ACTION=="add" KERNEL=="ttyXR3" KERNELS=="0000:02:0c.0" SUBSYSTEM=="tty" NAME="ttyS11"
注意:当第一张串口卡移除的时候,driver给第二张串口卡分配的名字(就是 KERNEL=="tty???"那部分)会变;所以,规则要写两遍,以应对不同的情况。
上一篇:NetworkManager 与 link down
下一篇:配置tftp server