Linux环境下串口号变化,自定义串口,修改串口号,绑定设备ID

在Linux环境下有时候我们有多个外设都占用了系统环境的/dev/ttyUSBx(x表示串口号),也许代码中我们写的是x=0,但是在对USB外设重新拔插之后,我们原来的设备可能就不是x=0了,而是其他的串口号。面对这样有多设备连接,要串口识别的情况,我无法在代码中以监听的方式来识别我需要的监听的USB外设,所以我通过以下的操作解决以上的问题。

1.首先命令行输入lsusb查看设备

nx@nx-desktop:~/bagfiles$ lsusb
Bus 002 Device 003: ID 04b4:4722 Cypress Semiconductor Corp. 
Bus 002 Device 002: ID 0bda:0489 Realtek Semiconductor Corp. 
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 13d3:3549 IMC Networks 
Bus 001 Device 007: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UART Bridge / myAVR mySmartUSB light
Bus 001 Device 006: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
Bus 001 Device 002: ID 0bda:5489 Realtek Semiconductor Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

找到对应USB的设备ID,我这里是 10c4:ea60, 当然你可以不连接USB设备输入lsusb,连接上后再输一次lsusb,多加出现的那一行就是你对应的ID.每个外设的ID都是唯一的,因此不会存在ID重复的现象。

2.添加自定义USB文件

输入 cd /etc/udev/rules.d 进入rules.d目录,新建一个usb.rules文件,可以用 touch usb.rules/ 也可以直接sudo vim usb.rules:

$ cd /etc/udev/rules.d
$ sudo vim usb.rules

创建完进入文件后加入以下命令:

KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0666", SYMLINK+="ttyUSB_ROS"

这里的id就是上面lsusb找出来的设备id, "ttyUSB_ROS"是我自己取的名字(中文除外),保存退出。

3.重启udev

$ service udev reload
$ service udev restart

4.重新拔插USB设备

然后执行:

$ cd /dev
$ ls -al

就可以找到绑定的USB名称

crwxrwxrwx   1 root dialout 188,   1 Feb 18 10:43 ttyUSB1
crwxrwxrwx   1 root dialout 188,   2 Feb 18 10:43 ttyUSB2
lrwxrwxrwx   1 root root           7 Feb 18 10:27 ttyUSB_ROS -> ttyUSB2

到这里以上问题就解决了

5.补充

  • 如果我们想使用这一USB口,我们大多时候都要修改权限才可以使用,可以通过以下命令更改权限
$ sudo chmod 666 /dev/ttyUSB_ROS
# or
$ sudo chmod 666 /dev/ttyUSB*

版权声明:本文为weixin_45827321原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。