如何将 ttyUSBX 设备与 USB 串行设备相匹配

如何将 ttyUSBX 设备与 USB 串行设备相匹配

选项驱动程序正确匹配 USB ID 并加载该设备的驱动程序。例如

# lsusb
Bus 001 Device 002: ID 19d2:0031 ONDA Communication S.p.A. ZTE MF636
Bus 001 Device 003: ID 12d1:14ac Huawei Technologies Co., Ltd.

它还创建 ttyUSBX 设备来管理硬件

crw-rw---- 1 root uucp 188, 0 Jul  4 13:48 /dev/ttyUSB0
crw-rw---- 1 root uucp 188, 1 Jul  4 13:49 /dev/ttyUSB1
crw-rw---- 1 root uucp 188, 2 Jul  4 13:35 /dev/ttyUSB2
crw-rw---- 1 root uucp 188, 3 Jul  4 13:37 /dev/ttyUSB3
crw-rw---- 1 root uucp 188, 4 Jul  4 13:37 /dev/ttyUSB4
crw-rw---- 1 root uucp 188, 5 Jul  4 13:37 /dev/ttyUSB5
crw-rw---- 1 root uucp 188, 6 Jul  4 13:37 /dev/ttyUSB6
crw-rw---- 1 root uucp 188, 7 Jul  4 13:37 /dev/ttyUSB7

但是,我有多个 USB 串行设备,我想知道哪个 ttyUSB 对应哪个 USBID。前任。 /dev/ttyUSB1 -> 19d2:0031

您知道我可以在哪里获得这些信息吗?

答案1

您可以尝试查看您的设备是否已在 /dev/serial/by-id/ 下注册

ls -l /dev/serial/by-id

这些名称应该一致并且将指向(符号链接)正确的 ttyUSBx

答案2

看一下 sysfs 文件系统。我的 USB 串口示例:

$ lsusb
Bus 003 Device 016: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
$ ls -l /sys/bus/usb-serial/devices
lrwxrwxrwx 1 root root 0 Jul  4 17:37 ttyUSB0 -> ../../../devices/pci0000:00/0000:00:1c.0/0000:02:00.0/usb3/3-1/3-1:1.0/ttyUSB0
$ $ grep PRODUCT= /sys/bus/usb-serial/devices/ttyUSB0/../uevent
PRODUCT=67b/2303/300

如您所见,ttyUSB0映射到067b:2303我的计算机上。其他值得探索的地点是/sys/class/tty/。注意符号链接。

答案3

我曾有一个类似的问题

将其写入 /etc/udev/rules.d/50-usb.rules

SUBSYSTEM=="tty", ATTRS{idVendor}=="19d2", ATTRS{idProduct}=="0031", SYMLINK+="ONDA"
SUBSYSTEM=="tty", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="14ac", SYMLINK+="HUAWEI"

到最后。重启。

现在您可以使用它/dev/ONDA来访问您的 ONDA 设备。

如果您希望非 root 用户能够使用这些,请添加

, MODE="0666"

到每行的末尾。

答案4

以下命令将为我提供与 19d2:0016 关联的 ttyUSB 设备名称列表(这是 ZTE MF831 LTE 棒的“调制解调器模式”ID,您的可能有所不同。):

    for i in $(find -L /sys/bus/usb/devices/ -maxdepth 2 -name "ttyUSB*"); do
        egrep -i "v19d2p0016(.*)in02" $i/../modalias >/dev/null && echo "/dev/${i##*/}"
    done

这将循环访问 /sys/bus/usb/devices 中文件名为 ttyUSB* 的文件列表,包括符号链接。在结果中,我们将搜索名为 modalias 的文件,并查找包含供应商 id“v”“19d2”和产品 id“p”0016 的字符串。如果输出匹配,我们将回显前缀为“/dev/”的字符串“在USB前面?姓名。据我所知,第一个或通常是最后一个(最大数字)是中兴设备的调制解调器端口。您可以将结果回显到 /tmp/ 中的文件,并相应地使用 head -n1 或 tail -n1 行。如果您有集线器,您可能需要增加最大深度。

这不是最优雅的方式,但它几乎适用于任何 Linux 变体。

相关内容