【发布时间】:2015-09-14 21:52:29
【问题描述】:
我需要从 Python 中的 VID 和 PID 在 sysfs 树中找到一个 USB 设备。这里最明智的方法是什么?递归扫描目录树是我想到的唯一想法。有没有更好的方法?顺便说一句,我不能使用 libusb 绑定。
【问题讨论】:
我需要从 Python 中的 VID 和 PID 在 sysfs 树中找到一个 USB 设备。这里最明智的方法是什么?递归扫描目录树是我想到的唯一想法。有没有更好的方法?顺便说一句,我不能使用 libusb 绑定。
【问题讨论】:
您可以尝试对 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
连载
busnum
devnum
我可以通过不止一种方式检索设备名称。:
我可以使用上面的busnum和devnum组成这个设备名:/dev/usb/001/008
或使用来自 /sys/class/usbmisc/lp0/uevent 的信息:
专业=180
次要=0
DEVNAME=usb/lp0
将 /dev 添加到 DEVNAME 值,我得到 /dev/usb/lp0
我希望有一个更简单的方法,有一个唯一的密钥、一个描述和一个指向每个设备的链接。人们可能希望它会出现在 sysfs 的未来版本中。但由于使用 C sysfs API 更容易使用,前景可能还很遥远
【讨论】: