指定されたデバイスIDへのUSBデバイスパスを取得します。

指定されたデバイスIDへのUSBデバイスパスを取得します。

USBをマイコンピュータのポートに接続した後、これを行うと、lsusbあなたが探しているデバイスが表示されます。

Bus 001 Device 004: ID 04f2:b573 Some Manufacturer

以下にデバイスをリストすると、...などのような多くの/dev/デバイスパスが表示されます。私が理解しているように、これらのパスの1つは私のUSBデバイス、または私のUSBデバイスが接続されている場所です。/dev/tty0/dev/ttyUSB0

どれがIDを持っているのか、どうすればわかりますか04f2:b573


この問題しかし、私と似ています(参照受け入れられた回答$ID_SERIAL)正確には何か、私が探しているIDと同じように設定する方法、さらには正しいパスが何であるかわかりません(その例では/dev/ttyACM0、、、、..などの複数のデバイスパスを表示するためです)。/dev/sdb/dev/input/event5

また、2番目の答えは、デバイスがに接続されていることを知っていると仮定します。/dev/ttyUSB0これは事前にわかりません(しかし、この特定のパスでテストしても何も提供されませんでした)。

ベストアンサー1

どれがIDを持っているのか、どうすればわかりますか04f2:b573

これを行うより良い方法があるかもしれませんが、迅速で汚い方法は次のとおりです。

find_by_id(){
    v=${1%:*}; p=${1#*:}  # split vid:pid into 2 vars
    v=${v#${v%%[!0]*}}; p=${p#${p%%[!0]*}}  # strip leading zeros
    grep -il "^PRODUCT=$v/$p" /sys/bus/usb/devices/*:*/uevent |
    sed s,uevent,, |
    xargs -r grep -r '^DEVNAME=' --include uevent
}
find_by_id 04f2:b573

私の既存のHuawei携帯電話は2つのシリアルttyとして表示されます。

$ find_by_id 12d1:
/sys/bus/usb/devices/3-1:1.0/ttyUSB0/tty/ttyUSB0/uevent:DEVNAME=ttyUSB0
/sys/bus/usb/devices/3-1:1.1/ttyUSB1/tty/ttyUSB1/uevent:DEVNAME=ttyUSB1

最後のgrepを次のように変更できます。

xargs -r egrep -rB2 '^DEVNAME=|^IFINDEX=' --include uevent

USBネットワークインターフェースも見つけるには:

$ find_by_id 0e8d:
/sys/bus/usb/devices/1-6.2.3:1.0/net/usb0/uevent-INTERFACE=usb0
/sys/bus/usb/devices/1-6.2.3:1.0/net/usb0/uevent:IFINDEX=10

$ find_by_id 03f0:
/sys/bus/usb/devices/1-6.3:1.1/usbmisc/lp1/uevent-MAJOR=180
/sys/bus/usb/devices/1-6.3:1.1/usbmisc/lp1/uevent-MINOR=1
/sys/bus/usb/devices/1-6.3:1.1/usbmisc/lp1/uevent:DEVNAME=usb/lp1

おすすめ記事