简洁版本:
如何从 和 等设备信息中/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.1
0:3:1.0
port0
我尝试过的:
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 设备DEVPATH
,echo /sys/devices/pci0000:00/0000:00:13.1/usb6/6-3/*/tty/*
则会显示其名称 ( ttyUSBx
)。
但是,当您的父设备出现并触发您的脚本时,该子设备的发现可能尚未完成,这意味着当您查找该 TTY 设备时可能还不存在。所以你最好创建一个与子设备本身匹配的udev规则。