在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版权协议,转载请附上原文出处链接和本声明。