Linux串口ttyUSB修改别名

1|0背景

Linux环境下经常会遇到USB设备节点不固定的问题。通常设备节点名为ttyUSBx(x代表任意数字),Linux内核会根据设备插入的先后顺序进行编号的分配,即第一个插入的设备编号为ttyUSB0、第二个插入的设备编号为ttyUSB1,依次类推。

然而,当我们重启Linux系统或者重新插拔USB设备后,Linux内核会重新分配每个设备的编号,原来的设备编号会发生改变。我们无法保证设备A的设备节点就是ttyUSB0,设备B的设备节点就是ttyUSB1,在设备文件/dev目录下没有提供固定显示ttyUSB的方法。因此,如果仅仅以设备节点ttyUSBx来区分具体是哪个设备,很容易造成程序的混乱。

其实,Linux主机或者服务器的每个USB端口都有一个唯一的端口号,相当于每个员工的工位。因此,我们可以根据端口号来区分每个设备。简单来说,就是固定设备插入到指定的USB端口(如:设备A插入到端口1),然后根据端口号找到挂载在这个端口号上面的USB设备节点。(这个就好比我们可以通过员工工位来找到对应的员工)。

按照以上逻辑,我们还可以根据端口号来自定义串口设备节点的名称,如自定义设备A的节点为ttyUSB_A

2|0具体方法

  1. 插入串口设备,查看/dev目录下系统自动分配的设备节点

    [root@linux ~]# ls -l /dev/ttyUSB*
    crw-rw---- 1 root dialout 188, 0 Aug 30 15:13 /dev/ttyUSB0
    

    可以看出,当前设备的节点为ttyUSB0

  2. 输入以下命令查看当前设备节点(ttyUSB0)所在的USB端口号

    udevadm info -a -n /dev/ttyUSB0 | grep KERNELS
    

    结果如下:

    KERNELS=="ttyUSB0"
    KERNELS=="1-1.1:1.0"
    KERNELS=="1-1.1"
    KERNELS=="1-1"
    KERNELS=="usb1"
    KERNELS=="0000:01:00.0"
    KERNELS=="0000:00:00.0"
    KERNELS=="pci0000:00"
    KERNELS=="fd500000.pcie"
    KERNELS=="scb"
    KERNELS=="platform"
    

    其中,第三行的值为当前设备节点ttyUSB0所在的端口号:1-1.1

  3. 输入以下指令新增udev规则文件,自定义端口别名

    sudo vim /etc/udev/rules.d/usb-serial.rules
    

    写入内容如下:

    SUBSYSTEM=="tty", KERNELS=="1-1.1", SYMLINK+="ttyUSB_A", MODE="0666"
    

    上面KERNELS的值为端口号1-1.1SYMLINK的值为我们自定义的设备节点别名ttyUSB_A,保存并退出

  4. 重新加载udev规则

    sudo udevadm control --reload-rules
    sudo service udev restart
    sudo udevadm trigger
    
  5. 加载完毕后,再次查看/dev下的设备节点

    [root@linux ~]# ls -l /dev/ttyUSB*
    crw-rw-rw- 1 root dialout 188, 0 Aug 30 15:38 /dev/ttyUSB0
    lrwxrwxrwx 1 root root         7 Aug 30 15:38 /dev/ttyUSB_A -> ttyUSB0
    

    可以看出,上面出现了我们自定义的设备节点ttyUSB_AttyUSB_A实际上是ttyUSB0设备节点的端口映射,之后我们就可以通过使用ttyUSB_A节点来对串口设备进行打开、关闭等操作了。


__EOF__

本文作者蓝莓薄荷
本文链接https://www.cnblogs.com/blueberry-mint/p/17667487.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   蓝莓薄荷  阅读(1411)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
点击右上角即可分享
微信分享提示