如何将Conbee II与Z-Stick Gen5+映射到固定路径以避免端口互换?
解决USB串口设备路径互换的问题
可以通过udev规则为你的Conbee II和Z-Stick Gen5+创建固定的软链接路径,彻底解决插拔或重启后串口路径互换的问题,具体步骤如下:
1. 获取设备的唯一标识
首先需要拿到两个设备的USB硬件唯一信息,用来精准区分它们:
- 执行
lsusb命令,找到Conbee II和Z-Stick Gen5+对应的条目,记录它们的Vendor ID(VID)和Product ID(PID),格式为xxxx:xxxx。 - 若需要更严格的区分(比如存在同型号设备),可以执行
udevadm info -a -n /dev/ttyACM0 | grep -E 'serial|idVendor|idProduct'(替换/dev/ttyACM0为当前设备的实际路径),获取设备的唯一序列号。
2. 创建udev规则文件
在宿主机的/etc/udev/rules.d/目录下创建自定义规则文件,比如99-usb-serial.rules:
sudo nano /etc/udev/rules.d/99-usb-serial.rules
根据获取到的设备信息写入规则,示例如下:
- 为Conbee II创建固定软链接
/dev/conbee2:SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="8a2a", SYMLINK+="conbee2" - 为Z-Stick Gen5+创建固定软链接
/dev/zstick:SUBSYSTEM=="tty", ATTRS{idVendor}=="0658", ATTRS{idProduct}=="0200", SYMLINK+="zstick"
如果需要用序列号精准匹配,在规则中添加ATTRS{serial}=="你的设备序列号"即可,比如:
SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="8a2a", ATTRS{serial}=="ABCDE12345", SYMLINK+="conbee2"
3. 加载并生效规则
保存规则文件后,执行以下命令让udev重新加载规则并触发生效:
sudo udevadm control --reload-rules sudo udevadm trigger
之后插拔你的USB设备,就能在/dev/目录下看到创建的固定软链接了。
4. 容器中使用固定路径
后续配置容器时,直接映射这些固定软链接路径,比如Docker运行命令中添加:
--device /dev/conbee2:/dev/conbee2 --device /dev/zstick:/dev/zstick
如果用Docker Compose,在配置文件的devices字段中添加:
devices: - /dev/conbee2:/dev/conbee2 - /dev/zstick:/dev/zstick
这样无论设备插拔顺序如何,容器都能通过固定路径访问对应的串口设备,避免因路径变化导致的崩溃问题。
内容的提问来源于stack exchange,提问作者Rico Walker
相关产品推荐
相关产品推荐

