usb外设调试

KERNEL==”ttyUSB*”,KERNELS==”3-1.3”,ATTRS{idVendor}==”0403”, ATTRS{idProduct}==”6001”, MODE:=”0777”,SYMLINK+=”lglove”

端口绑定 usb rules

只有一种硬件地址的设备

1
2
#例如显示usb信息为:
lsusb
1
Bus 001 Device 010: ID 10c4:8108 Cygnal Integrated Products, Inc.

idVendor10c4idProduct8108

1
2
3
4
5
6
# 进入/etc/udev/rules.d目录
cd /etc/udev/rules.d
# 创建新的规则
sudo touch foo.rules
# 编辑规则
sudo vim foo.rules

输入:

1
KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="8108", MODE:="0777",SYMLINK+="foo"

匹配sys中内核名为ttyUSB*的设备,属性匹配依据生产商编号idVendor和产品号idProduct,设定读写权限为0777SYMLINK为将该usb设备映射为其他别名的设备foo.

重启串口后拔插设备即可。

1
2
3
sudo service udev reload
sudo service udev restart
sudo udevadm control --reload-rules && sudo udevadm trigger

输入

1
ls -l /dev | grep ttyUSB

可以看到映射关系
1
lrwxrwxrwx   1 root root             7 Aug 12 15:35 foo -> ttyUSB0

有多个相同硬件地址的设备

如果购买了两个相同的串口设备,比如都是ch341(ID是1a86:7523),用上面的方法就无法区分和绑定了。我们可以通过KERNELS的差异来绑定

使用KERNELS来区分

1
udevadm info --attribute-walk --name=/dev/ttyUSB0 | grep KERNELS
1
2
3
4
5
6
7
8
KERNELS=="input16"
KERNELS=="0003:10C4:8108.0005"
KERNELS=="1-4.4:1.0"
KERNELS=="1-4.4"
KERNELS=="1-4"
KERNELS=="usb1"
KERNELS=="0000:00:14.0"
KERNELS=="pci0000:00"

如结果为上面显示的,则添加的规则判断为去掉冒号前,即 KERNELS=="1-4.4" ,完整规则为:

1
KERNEL=="ttyUSB*",KERNELS=="1-4.4",ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="8108", MODE:="0777",SYMLINK+="foo"