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
2 年経った今でも、デバイスの識別から実際のデバイスへの接続を確立するのは簡単ではありません。デバイスを識別するために 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 を使用する方が簡単に操作できるため、見通しはおそらくずっと先です。