我需要从 Python 中的 VID 和 PID 在 sysfs 树中找到一个 USB 设备。这里最明智的方法是什么?递归扫描目录树是我想到的唯一想法。有没有更好的方法?顺便说一句,我不能使用 libusb 绑定。
2 回答
您可以尝试对 USB 设备使用 sysfs 路径、/sys/bus/usb/devices/,并为 idProduct 和 idVendor 文件使用通配符
/sys/bus/usb/devices/*/idProduct
/sys/bus/usb/devices/*/idVendor
两年后,从识别设备到实际设备的连接仍然不是直截了当的。您必须扫描 sysfs 以识别设备是正确的。当前没有从唯一 ID 到设备的索引。
这是一个例子:
我有一个 USB → LPT 端口连接(没有序列号)
我在 /sys/class 下找到设备。在这种情况下,在 usbmisc 下:
> ls -l /sys/class/usbmisc
lrwxrwxrwx 1 root root 0 Sep 11 12:11 lp0 -> ../../devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3.4/1-1.3.4:1.0/usbmisc/lp0
要检索有关设备的供应商和其他信息,请遍历树:
进入真实路径:
> cd -P /sys/class/usbmisc/lp0
沿着分支走一点(到这里: /sys/devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3.4 ):
> cd ../../../
在这里您可以找到有用的文件:
idVendor
idProduct
serial
busnum
devnum
我可以通过不止一种方式检索设备名称:
我可以使用上面的 busnum 和 devnum 并组成这个设备名称:/dev/usb/001/008
或使用 /sys/class/usbmisc/lp0/uevent 中的信息:
MAJOR=180
MINOR=0
DEVNAME=usb/lp0
将 /dev 添加到 DEVNAME 值,我得到/dev/usb/lp0
我本来希望有一个更简单的方法,有一个唯一的密钥、一个描述和一个指向每个设备的链接。人们可能希望它会出现在 sysfs 的未来版本中。但由于使用 C sysfs API 更容易使用,前景可能还有很长的路要走