news 2026/6/6 18:42:17

【Linux】解决两个USB设备VID/PID/序列号全一样无法区分的问题 (udev物理端口绑定)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Linux】解决两个USB设备VID/PID/序列号全一样无法区分的问题 (udev物理端口绑定)

1. 问题描述

最近在搞机器人开发,买了一个 IMU 和一个 RTK 模块。插到电脑上发现一件很崩溃的事:
这俩货用的 USB 转串口芯片一模一样,导致:

  • idVendor一样

  • idProduct一样

  • Serial Number也一样(全是空或者默认值)

这就导致没法用常规的 ATTRS{idVendor} 或 ATTRS{serial} 来写 udev rules 固定设备名(比如 /dev/ttyimu)。每次重启或重插拔,/dev/ttyUSB0 和 /dev/ttyUSB1 就会随机互换,程序经常读错设备。

2. 解决方案

既然软件层面的 ID 无法区分,只能使用物理端口绑定 (Physical Port Binding)
也就是说:通过识别设备插在电脑的哪个 USB 孔上,来给它命名。

注意:这种方法的缺点是,一旦配置好,USB 线就不能乱换插孔,也不能随便加减 USB Hub,否则规则会失效。

3. 操作步骤

第一步:物理连接(定死位置)

先把设备插好,决定好它们以后就在这不动了。

  • 比如:IMU 插在扩展卡的上口,RTK 插在下口

  • 此时系统分配了 ttyUSB0 和 ttyUSB1。

第二步:查找物理路径 (KERNELS)

我们需要找到代表那个 USB 物理孔的唯一编码。

在终端分别执行:

# 查看 ttyUSB0 的物理路径信息 udevadm info -a -n /dev/ttyUSB0 | grep KERNELS # 查看 ttyUSB1 的物理路径信息 udevadm info -a -n /dev/ttyUSB1 | grep KERNELS

输出里会有很多 KERNELS,找第三行左右、类似 1-2 或 3-1:1.0 这种格式的
你会发现两个设备的这个值是不一样的。

  • 假设 IMU (ttyUSB0) 查到的是:KERNELS=="3-1"

  • 假设 RTK (ttyUSB1) 查到的是:KERNELS=="3-2"

第三步:编写 udev 规则文件

新建或修改规则文件:
sudo nano /etc/udev/rules.d/99-usb-serial.rules

写入以下内容(把 KERNELS 换成你刚才查到的实际值):

# ========================================================== # 解决双胞胎设备问题:ID和序列号均相同,通过物理路径(KERNELS)绑定 # 警告:插孔位置一旦改变,规则将失效! # ========================================================== # 1. IMU 模块 (物理位置:3-1) ACTION=="add", SUBSYSTEM=="tty", KERNELS=="3-1", MODE="0777", GROUP="dialout", SYMLINK+="ttyimu" # 2. RTK 模块 (物理位置:3-2) ACTION=="add", SUBSYSTEM=="tty", KERNELS=="3-2", MODE="0777", GROUP="dialout", SYMLINK+="ttyrtk"
第四步:重新加载生效

保存文件后,执行以下命令重载规则:

sudo udevadm control --reload && sudo udevadm trigger

此时查看 /dev 下应该就有固定的软链接了:

ls -l /dev/ttyimu /dev/ttyrtk

4. 总结

  • 首选方案:如果有序列号 (ATTRS{serial}),优先用序列号区分,那样不怕换插孔。

  • 备选方案:如果序列号一样,只能用本文的 KERNELS 方法,但要记住线不能乱动

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/31 6:34:17

随想-关于光速极限

其实说到这里,为啥不能超过光速,这事已经没啥可说的了。答案就是不为啥,也没有说宇宙把速度限制到了光速。其实放下各种复杂的理论不谈,就只是说这个想法,是不是有点自大。宇宙之大无奇不有,为啥非得去限制…

作者头像 李华
网站建设 2026/5/31 8:04:34

unity 资源导入 godot

文章目录 unity 资源导入 godot 大多数你有权限就行,比如免费商店 对于2D 游戏手工搬运 texture 就行,也有Unidot Importer这样的工具(GameFromScratch的视频介绍)不过适合项目迁移,自己搞的话自己搭建最好 主要是 uni…

作者头像 李华
网站建设 2026/5/30 1:36:35

Redis:Redis键值淘汰策略

文章目录键值淘汰策略使用 maxmemory 配置指令为复制或持久化实例设置 maxmemory淘汰策略使用 INFO 命令近似 LRU 算法LFU 淘汰键值淘汰策略 Redis 常被用作缓存,以加速对较慢服务器或数据库的读取访问。由于缓存条目是持久存储数据的副本,当缓存内存不…

作者头像 李华
网站建设 2026/5/31 11:41:56

CC工具箱使用指南:【遍历图斑】

一、简介 之前做过一个遍历图斑的工具: 有点过于简陋了。 主要平时自己也不用,就没去动它。 最近看好几个小伙伴都做了类似的工具,功能很完善。 于是这个工具看着就有点碍眼,优化一下吧。 旧工具将会移除,要用就用…

作者头像 李华
网站建设 2026/6/6 3:30:51

AI大模型赋能垂直行业:从零到一的实战案例解析_AI大模型赋能垂直行业标杆案例集(2026)

GSMA发布的《AI大模型赋能垂直行业标杆案例集》展示了大模型在政务、客服、医疗教育等领域的应用实践,提升服务效率与质量,助力运营商向信息服务创新者转变。这些案例为各行业数字化转型提供参考,随着技术进步,AI大模型将在更多领…

作者头像 李华