电子工坊

Linux 笔记 | Ubuntu 使用udev绑定ttyUSB端口

Linux 笔记 | Ubuntu 使用udev绑定ttyUSB端口

Udev 是 Linux 的设备管理器,可以为硬件设备动态创建和删除节点。简而言之,它可以帮助您的计算机轻松找到您的机器人设备。默认情况下,连接到 Linux (Ubuntu) PC 的硬件设备将属于 root 用户。这意味着任何以非特权(即非 root)用户身份运行的程序(例如 ROS 节点)将无法访问它们。最重要的是,Linux是按照插入顺序设备名如ttyACMx和ttyUSBx是任意编号。通过udev设备描述符固定端口号,就可以解决这个问题。

1. 查看USB设备信息

下面以RPLIDAR-A1激光雷达作为示例。
首先拔插USB,输入命令查看信息:

sudo dmesg | tail

这里可看到设备的idVendor和idProduct,还有已连接到ttyUSB2.

2. 配置udev规则

首先进入udev规则目录,并且创建你想配置的文件,如51-rplidar.rules

cd /etc/udev/rules.d
sudo vim 51-rplidar.rules 

编辑内容如下:

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


udev 规则由一堆逗号分隔的标签组成,如上所述。标签分为两部分:匹配和配置,但是它们顺序是可以调换的,重新配置后最终生成/dev/rplidar设备文件

还有其他的键值可看这篇博客
还有英文手册

保存编辑好的文件,退出。然后重启udev服务

sudo service udev reload
sudo service udev restart

重新拔插设备后可看到指向挂载点ttyUSB0的链接符号rplidar

ls -l /dev/rplidar

3. 绑定USB端口

你可能遇到雷达、IMU串口都是使用cp2102芯片通讯,这样usb的PID和VID相同,从而导致识别错乱,绑定设备的USB端口是最稳妥方法

首先根据第一步查找到你接入的USB设备,比如/dev/ttyUSB2,获取USB系统属性信息列表

udevadm info --attribute-walk --name=/dev/ttyUSB2


这里可看到KERNELS=="1-2.1",将这个KERNELS匹配键添加到刚udev文件上

首先进入udev规则目录,编辑你的配置的文件,如51-rplidar.rules

cd /etc/udev/rules.d
sudo vim 51-rplidar.rules 

保存编辑好的文件,退出。然后重启udev服务,重新拔插设备即可识别

sudo service udev reload
sudo service udev restart

现在KERNELS的值与现实物理USB接口绑定,只要USB接口不变,那么不同顺序的插入都不影响Linux识别传感器设备。

注意事项