在两个 USB 转串口设备中,虽然 idVendor
和 idProduct
都是相同的(即 067b
和 23a3
),但是它们的 serial
属性不同。这种情况在使用相同型号的设备时是很常见的,因为 idVendor
和 idProduct
只是标识设备的制造商和产品型号,而 serial
则是设备的唯一标识符。
先输入:udevadm info -a -n /dev/ttyUSB0
返回ttyUSB0的信息
解决方法:
由于这两个设备的 idVendor
和 idProduct
相同,你需要使用 serial
属性来区分它们,以确保它们分别映射到 ttyUSBtx
和 ttyUSBbh
。你可以这样做:
udev
规则文件示例:
# 规则 1: 将设备 serial 为 BQANb136G03 的映射为 ttyUSBtx
SUBSYSTEM=="tty", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="23a3", ATTRS{serial}=="BQANb136G03", SYMLINK+="ttyUSBtx"
# 规则 2: 将设备 serial 为 EWCZb136G03 的映射为 ttyUSBbh
SUBSYSTEM=="tty", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="23a3", ATTRS{serial}=="EWCZb136G03", SYMLINK+="ttyUSBbh"
步骤:
-
编辑
udev
规则文件:
将上述规则写入/etc/udev/rules.d/99-usb-serial.rules
文件中。 -
重新加载
udev
规则:
运行以下命令以重新加载规则:sudo udevadm control --reload-rules sudo udevadm trigger
-
验证符号链接:
重新插入设备,并使用以下命令检查符号链接是否正确生成:ls -l /dev/ttyUSBtx ls -l /dev/ttyUSBbh
总结:
通过使用 serial
属性,你可以确保即使 idVendor
和 idProduct
相同,这两个设备仍然能够被正确区分,并分别映射到 ttyUSBtx
和 ttyUSBbh
。这将确保你的程序能够准确地与每个设备进行通信,避免数据混淆的问题。