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设备文件

  • 匹配键
    • KERNEL : 内核设备名称
    • ATTRS{idProduct} : usb芯片的idVendor供应商ID
    • ATTRS{idProduct} : usb芯片的idProduct识别码
  • 赋值键
    • MODE : 设备设定权限
    • SYMLINK : /dev/下的设备文件产生符号链接

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

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

sudo service udev reload
sudo service udev restart

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

ls -l /dev/rplidar

3. 绑定USB端口

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

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

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

获取USB系统信息
这里可看到KERNELS=="1-2.1",将这个KERNELS匹配键添加到刚udev文件上

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

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

增加KERNELS匹配键

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

sudo service udev reload
sudo service udev restart

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

注意事项

  • 检查您的规则是否遵循命名约定 – .rules. 从技术上讲,您可以为同一设备设置多个规则,并且数量决定了它们的执行顺序。由于我们正在编写插件规则,因此优先级为 99 是最安全的。

  • 一个文件中可以有多个规则,由换行符分隔。确保每个单独的规则都在一行上。

  • 检查所有标记(匹配和配置)是否以逗号分隔。
  • 检查您的规则文件是否有尾随换行符。
  • 检查您的规则是不是root用户ll /etc/udev/rules.d/输出root root为root用户所有 。
许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。
ROS技术空间 » Linux 笔记 | Ubuntu 使用udev绑定ttyUSB端口

发表评论

提供最优质的资源集合

立即查看 了解详情