【问题记录】当机器人存在多个串口需要绑定时udevadm的作用
一、正常绑定
输入sudo udevadm info -a /dev/ttyUSBx | grep KERNELS 命令
会出现KERNELS的编号,记录编号。
修改规则文件/etc/udev/rules.d/99-usb.rules
添加以下命令
KERNEL=="ttyUSB*", KERNELS=="2-1.2:1.0", MODE:="0666", GROUP:="dialout", SYMLINK+="base"
- 详细解释如下:
- KERNEL=="ttyUSB": 这个条件匹配设备名称以 ttyUSB 开头的设备(例如 ttyUSB0, ttyUSB1 等)。
- KERNELS=="2-1.2:1.0": 这个条件用于匹配特定的设备路径或总线 ID。2-1.2:1.0 是设备的唯一标识符,表示从 USB 总线上的特定端口连接的设备。
- MODE:="0666": 这个动作设置设备文件的权限。0666 表示所有用户都可以读取和写入该设备文件。
- GROUP:="dialout": 这个动作将设备文件的所属组设置为 dialout,这样只有属于该组的用户才能访问该设备。
- SYMLINK+="base": 这个动作创建一个名为 base 的符号链接,指向匹配的设备文件。这使得访问该设备更加方便,因为可以使用 base 而不是完整的设备路径。
修改完规则后,使用以下命令重新加载 udev 规则:
sudo udevadm control --reload-rules
sudo udevadm trigger
输入ls -l /dev |grep -E ‘ttyUSB’查看有无配置成功
二、需要添加权限
如果遇到特殊设备需要添加某些权限,例如可以加入以下规则:
ACTION=="add",SUBSYSTEMS=="usb",ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="0053", GROUP="users", MODE="0777"
这条规则的目的是为特定的 USB 设备(具有指定的厂商和产品 ID)设置开放的访问权限。
详细解释:
ACTION=="add": 这个条件表示规则适用于添加新设备时的操作。当有设备被连接到系统时,此规则会被触发。
SUBSYSTEMS=="usb": 这个条件指定该规则仅适用于 USB 设备。它确保只有当设备属于 USB 子系统时,规则才会生效。
ATTRS{idVendor}=="04d8": 这个条件匹配 USB 设备的厂商 ID。04d8 是特定厂商的标识符,只有匹配该 ID 的设备才会执行此规则。
ATTRS{idProduct}=="0053": 这个条件匹配 USB 设备的产品 ID。0053 是特定产品的标识符,结合厂商 ID,确保只对特定的设备生效。
GROUP="users": 这个动作将设备文件的所属组设置为 users,使得该组的用户能够访问该设备。
MODE="0777": 这个动作设置设备文件的权限为 0777,表示所有用户(拥有者、组用户和其他用户)都可以读取、写入和执行该设备文件。