恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
USB设备名老变化?Linux udev规则和设备名固定
首页
资讯中心
/
USB设备名老变化?Linux udev规则和设备名固定
USB设备名老变化?Linux udev规则和设备名固定
发布时间:2026/10/14 15:09:00
在嵌入式板子上如果你碰过硬件那么每次插拔USB设备可能会发现设备名称会变化有时IMU是/dev/ttyUSB0有时是/dev/ttyUSB1。实际上设备名是“动态分配”的所以变化是时有发生的。分配名字的流程其实是按插入顺序分配的每次插拔都有可能发生变化。如果你在代码里写死某个具体的口那么很容易出现因为不匹配而找不到数据的情况导致代码无法运行或者有时候行有时候不行的魔幻问题与我另外一篇小车语音故障的文章有些类似udev是什么udev是linux的设备管理器负责给设备分配名字。它不完全是一个傻瓜管家我们可以通过设置规则来固定设备名也就是软连接。这种情况下不管IMU分配到usb几我们都给它建一个/dev/imu的软链接有点像代码里面加载config文件这是一种松耦合的好习惯。每一个usb设备都有一个身份证ID_VENDOR_ID厂商IDID_MODEL_ID型号IDDEVPATH物理路径ID_SERIAL_SHORT序列号想要查询这些也就是在不清楚哪个传感器在哪个usb想反向推理出的时候你只需要输入udevadm info --queryproperty --name/dev/ttyUSBxudev的规则文件放在/etc/udev/rules.d/下面后缀是.rules其基本格式为ACTIONadd匹配条件赋值。比如# 编码器CH3401a86:7523物理路径 3-1.2.2:1.0ACTIONadd,SUBSYSTEMtty,ATTRS{idVendor}1a86,ATTRS{idProduct}7523,KERNELS3-1.2.2:1.0,MODE666,SYMLINKencoder注释ACTIONadd设备插入时触发SUBSYSTEMtty只匹配串口设备ATTRS{idVendor}1a86厂商 ID 是 1a86ATTRS{idProduct}7523型号 ID 是 7523KERNELS3-1.2.2:1.0物理路径匹配用来区分其他同ID设备比如 CH340MODE666权限设为 rw-rw-rw-所有用户可读写SYMLINKencoder创建一个软链接 /dev/encoder写完规则文件后要通知 udev 重新加载sudo udevadm control --reload-rulessudo udevadm trigger--reload-rules重新读取规则文件trigger对现有设备重新应用规则然后检查软链接是否出现ls -la /dev/imu /dev/encoder /dev/laser如果一切顺利魔幻问题就能解决了。