不同USB单一设备的配置
确认设备ID号
在终端输入命令:
lsusb
可以看到类似下面的信息:
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 8087:0025 Intel Corp.
Bus 001 Device 004: ID 0bda:568c Realtek Semiconductor Corp.
Bus 001 Device 003: ID 0a5c:5834 Broadcom Corp.
Bus 001 Device 002: ID 046d:c534 Logitech, Inc. Unifying Receiver
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
其中ID xxxx:xxxx 是设备的固定信息,后面是设备的信息描述;
记录好ID信息供下一步使用。
新建设备信息文件
输入 cd /etc/udev/rules.d 进入rules.d目录,新建一个usb_name.rules文件。建议给每个需要固化的设备创建一个单独文件。
例如,有两个usb转485设备:
建立文件485_usb0.rules ,内容:
KERNEL=="ttyUSB*", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", MODE:="0777", SYMLINK+="485_usb0"
建立文件485_usb1.rules ,内容:
KERNEL=="ttyUSB*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE:="0777", SYMLINK+="485_usb1"
也可以创建成一个文件,485_usb.rules ,内容:
KERNEL=="ttyUSB*", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", MODE:="0777", SYMLINK+="485_usb0"
KERNEL=="ttyUSB*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE:="0777", SYMLINK+="485_usb1"
重启生效
重启下udev驱动
分别在终端输入以下命令,要保持一定的时间间隔:
sudo service udev reload
sudo service udev restart
重新插拔usb生效
以上操作可以封装成脚本文件
脚本文件参考:
文件名:initenv.sh;
赋予文件权限: sudo chmod +x initenv.sh;
文件内容:
echo 'KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0666", GROUP:="dialout", SYMLINK+="ydlidar"' >/etc/udev/rules.d/ydlidar.rules
echo 'KERNEL=="ttyACM*", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", MODE:="0666", GROUP:="dialout", SYMLINK+="ydlidar"' >/etc/udev/rules.d/ydlidar-V2.rules
echo 'KERNEL=="ttyUSB*", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", MODE:="0666", GROUP:="dialout", SYMLINK+="ydlidar"' >/etc/udev/rules.d/ydlidar-2303.rules
service udev reload
sleep 2
service udev restart
当设备的ID已知时,就可以写成固定值。
使用
当打开usb驱动时,就可以使用设定的名称。
例如:
“/dev/485_usb0”
“/dev/485_usb1”
“/dev/ydlidar”
注:查看设备命令
ls /dev/tty* | grep USB
ls /dev/ | grep 485
打不开usb串口
可能原因:权限不够;
查看权限:
ll /dev/tty* | grep USB
修改权限
sudo chmod +777 /dev/ttyUSB*
一转多USB设备或者相同ID号设备
设备类型:
单USB口转多485串口设备
自定义挂载命名方式:
-
连接设备至电脑USB口
-
运行
ls -l /dev/ | grep ttyUSB
查看系统检测到的随机分配的串口名,如:crwxrwxrwx 1 root dialout 188, 0 5月 21 18:13 ttyUSB0 crwxrwxrwx 1 root dialout 188, 1 5月 21 18:13 ttyUSB1 crwxrwxrwx 1 root dialout 188, 2 5月 21 18:13 ttyUSB2 crwxrwxrwx 1 root dialout 188, 3 5月 21 18:13 ttyUSB3
ttyUSB的后缀数字是随机的,一般范围为0~9,因此对于设备端口的识别并不方便,需要设置自定义的名称方便识别。
-
为了区别不同串口之间的区别,方便后续的自定义命名操作,需要知道每个串口的特性信息,比如,根据第2步的信息,可以查看各个口的信息:
udevadm info --attribute-walk --name=/dev/ttyUSB0 |grep KERNELS
可以查看0口的信息,终端会打印出如下信息:KERNELS=="ttyUSB3" KERNELS=="1-2.2:1.3" KERNELS=="1-2.2" KERNELS=="1-2" KERNELS=="usb1" KERNELS=="0000:00:14.0" KERNELS=="pci0000:00
通过对比信息中的不同,可以提取出区别与各个串口的KERNELS值,类似的操作有``udevadm info --attribute-walk --name=/dev/ttyUSB0 |grep ATTRS
查看其他特性,在找到这些特点后,就可以根据自己想定义的名字,开始
.rules`文件了,在本例中,具体内容如下:KERNELS=="1-2:1.0", KERNEL=="ttyUSB*", MODE:="0777", SYMLINK+="usb485_ch1" KERNELS=="1-2:1.1", KERNEL=="ttyUSB*", MODE:="0777", SYMLINK+="usb485_ch2" KERNELS=="1-2:1.2", KERNEL=="ttyUSB*", MODE:="0777", SYMLINK+="usb485_ch3" KERNELS=="1-2:1.3", KERNEL=="ttyUSB*", MODE:="0777", SYMLINK+="usb485_ch4"
将文件内容保存并命名为
usbto485.rules
并保存至/etc/udev/rules.d/
目录下 -
文件生效与测试
在终端中运行下面两行命令并将USB口重新拔插即可生效:
sudo service udev reload
sudo service udev restart
测试:
ls -l /dev/ | grep ttyUSB
结果打印:
crwxrwxrwx 1 root dialout 188, 0 5月 21 18:14 ttyUSB0 crwxrwxrwx 1 root dialout 188, 1 5月 21 18:14 ttyUSB1 crwxrwxrwx 1 root dialout 188, 2 5月 21 18:14 ttyUSB2 crwxrwxrwx 1 root dialout 188, 3 5月 21 18:14 ttyUSB3 crwxrwxrwx 1 root dialout 188, 4 5月 21 18:14 ttyUSB4 lrwxrwxrwx 1 root root 7 5月 21 18:14 usb485_ch1 -> ttyUSB4 lrwxrwxrwx 1 root root 7 5月 21 18:14 usb485_ch2 -> ttyUSB1 lrwxrwxrwx 1 root root 7 5月 21 18:14 usb485_ch3 -> ttyUSB2 lrwxrwxrwx 1 root root 7 5月 21 18:14 usb485_ch4 -> ttyUSB3
有终端结果可以看到,规则已生效。