Usb

獲取USB給定設備ID的設備路徑

  • September 15, 2021

將 USB 插入我機器的埠後,如果我這樣做了,lsusb我會看到我正在尋找的設備:

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

如果我在 下列出設備/dev/,我可以看到很多設備路徑,例如/dev/tty0/dev/ttyUSB0…等。據我了解,這些路徑之一將是我的 USB 設備,或者是我的 USB 設備連接的位置。

我怎麼知道哪個是有 ID 的04f2:b573


這個問題與我的相似,但是(參考接受的答案)我不知道究竟是什麼$ID_SERIAL,或者我如何將它設置為等於我正在尋找的 Id,甚至什麼是正確的路徑(因為他的範例顯示了多個設備路徑,例如/dev/ttyACM0, /dev/sdb, /dev/input/event5…)

此外,第二個答案假設我知道設備已連接到/dev/ttyUSB0,而我事先並不知道(順便說一下,在此特定路徑上測試它不會給我任何設備)。

我怎麼知道哪個是有 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

我的舊華為手機顯示為兩個串列 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

引用自:https://unix.stackexchange.com/questions/566682