Chinaunix首页 | 论坛 | 博客
  • 博客访问: 563002
  • 博文数量: 50
  • 博客积分: 4764
  • 博客等级: 上校
  • 技术积分: 597
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-18 09:00
个人简介

资深IT码农,擅长Linux、C/C++、bash

文章分类

全部博文(50)

文章存档

2015年(17)

2014年(2)

2011年(7)

2010年(4)

2009年(20)

分类: LINUX

2015-11-17 13:35:10

通过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???"那部分)会变;所以,规则要写两遍,以应对不同的情况。
阅读(5457) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~