根据usb硬件端口与内核的关系进行绑定
参考
系统设置参考思岚的脚本,usb 端口udev 设置和脚本编写 以思岚激光雷达的实例参考 rplidar.rules
KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0777", SYMLINK+="rplidar"
creat_udev_rule.sh
#!/bin/bash
echo "remap the device serial port(ttyUSBX) to rplidar"
echo "rplidar usb connection as /dev/rplidar , check it using the command : ls -l /dev|grep ttyUSB"
echo "start copy rplidar.rules to /etc/udev/rules.d/"
echo "`rospack find rplidar_ros`/scripts/rplidar.rules"
sudo cp `rospack find rplidar_ros`/scripts/rplidar.rules /etc/udev/rules.d
echo " "
echo "Restarting udev"
echo ""
sudo service udev reload
sudo service udev restart
echo "finish "
delete_udev_rules.sh
#!/bin/bash
echo "delete remap the device serial port(ttyUSBX) to rplidar"
echo "sudo rm /etc/udev/rules.d/rplidar.rules"
sudo rm /etc/udev/rules.d/rplidar.rules
echo " "
echo "Restarting udev"
echo ""
sudo service udev reload
sudo service udev restart
echo "finish delete"
实际经验
(1)对应某个设备文件,查询确认内核端口的方法,示例端口/dev/video0:
nvidia@tegra-ubuntu:~$ udevadm info --attribute-walk --name=/dev/video1 | grep KERNELS
KERNELS=="1-3.4:1.0"
KERNELS=="1-3.4"
KERNELS=="1-3"
KERNELS=="usb1"
KERNELS=="3530000.xhci"
nvidia@tegra-ubuntu:~$ udevadm info --attribute-walk --name=/dev/video0 | grep KERNELS
KERNELS=="1-3.1:1.0"
KERNELS=="1-3.1"
KERNELS=="1-3"
KERNELS=="usb1"
KERNELS=="3530000.xhci"
(2)当前usb_cam的udev rule:
nvidia@tegra-ubuntu:/etc/udev/rules.d$ cat 98-xxx-dev.rules
SUBSYSTEMS=="usb", KERNEL=="video*", KERNELS=="1-3.1", ATTRS{idProduct}=="1a90", ATTRS{idVendor}=="2de3",SYMLINK+="video_sence"
SUBSYSTEMS=="usb", KERNEL=="video*", KERNELS=="1-3.3", ATTRS{idProduct}=="1a90", ATTRS{idVendor}=="2de3",SYMLINK+="video_back"
SUBSYSTEMS=="usb", KERNEL=="video*", KERNELS=="1-3.4", ATTRS{idProduct}=="1a90", ATTRS{idVendor}=="2de3",SYMLINK+="video_front"
(3)当前连接设备
nvidia@tegra-ubuntu:/etc/udev/rules.d$ cd /dev/
nvidia@tegra-ubuntu:/dev$ ll video*
crw-rw----+ 1 root video 81, 0 Apr 2 09:19 video0
lrwxrwxrwx 1 root root 6 Apr 2 09:19 video_sence -> video0