如何从“/dev/bus/usb/006/015”获取“/dev/ttyUSB0”?

如何从“/dev/bus/usb/006/015”获取“/dev/ttyUSB0”?

简洁版本:

如何从 和 等设备信息中/devices/pci0000:00/0000:00:13.1/usb6/6-3获取/dev/bus/usb/006/015或 等/dev/ttyUSB0路径/dev/serial/by-path/pci-0000:00:13.1-usb-0:3:1.0-port0

详细版本:

我有一个脚本可以检测是否插入了特定类型的 USB 设备(Arduino)。连接设备后,它会显示一堆有关该设备的数据,例如设备路径和名称:

DEVPATH: /devices/pci0000:00/0000:00:13.1/usb6/6-3
DEVNAME: /dev/bus/usb/006/015

我希望第一个脚本调用第二个脚本,该脚本使用串行通信与 USB 设备交互。现在,当我手动启动第二个脚本时,我使用 TTY 指定设备:

./script2.py --device /dev/ttyUSB0

或者:

./script2.py --device /dev/serial/by-path/pci-0000:00:13.1-usb-0:3:1.0-port0

我希望第二个脚本由第一个脚本自动启动。为此,我需要将设备路径和名称映射到 TTY 路径或/dev/serial/by-path.

我怎么做?

在 中,我注意到DEVPATH 中by-path出现了,但我没有看到任何与or相关的内容(我想我不需要自己构建字符串,并且 Debian 已经有一个工具可以为我进行转换)。pci-0000:00:13.10:3:1.0port0

我尝试过的:

  • lsusb -v似乎没有显示任何相关内容:我认为它比 TTY 设备低级得多。

  • udevadm info /dev/ttyUSB0确实显示了 path /devices/pci0000:00/0000:00:13.1/usb6/6-3/6-3:1.0/ttyUSB0/tty/ttyUSB0,但是,udevadm info /dev/bus/usb/006/015没有显示与 TTY 设备相关的任何内容。

答案1

DEVPATH实际上存在于 中sysfs,因此您可以找到该目录下具有该名称的所有子设备。如果您确定您的 下有一个 TTY 设备DEVPATHecho /sys/devices/pci0000:00/0000:00:13.1/usb6/6-3/*/tty/*则会显示其名称 ( ttyUSBx)。

但是,当您的父设备出现并触发您的脚本时,该子设备的发现可能尚未完成,这意味着当您查找该 TTY 设备时可能还不存在。所以你最好创建一个与子设备本身匹配的udev规则。

相关内容