Usb

將物理 USB 設備路徑映射到 lsusb 返回的匯流排/設備號

  • April 18, 2020

我需要獲取連接的 USB 設備的標題。我可以做到這一點lsusb

udev 在我編寫規則時允許進行一些替換:例如,我們可以使用$kernel來獲取設備的名稱,或者$devpath獲取設備的路徑。

但問題是lsusb返回這樣的字元串:

Bus 005 Device 032: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC

但是udev的devpath是:

/devices/pci0000:00/0000:00:1d.0/usb5/5-2 

匯流排編號相同(5),但編號不同:Device 032似乎是某個邏輯編號(當我重新連接設備時,此編號會增加),並且2似乎是物理設備編號。

所以udev返回物理數字,我需要得到邏輯數字。然後,我可以像這樣檢索數據:lsusb -D /dev/bus/usb/005/032

那麼,如何032通過物理路徑獲取邏輯設備號/devices/pci0000:00/0000:00:1d.0/usb5/5-2

首先,我們需要/sys在返回的路徑前面加上udev,這樣路徑就變成了:/sys/devices/pci0000:00/0000:00:1d.0/usb5/5-2。然後進入這個目錄,裡面會有幾個文件。除其他外,還有文件busnumdevnum它們包含這些“邏輯”數字。因此,在 bash 腳本中,我們可以這樣檢索它們:

devpath='/devices/pci0000:00/0000:00:1d.0/usb5/5-2'

busnum=$(cat "/sys/$devpath/busnum")
devnum=$(cat "/sys/$devpath/devnum")

# we might want to make busnum and devnum have leading zeros
# (say, "003" instead of "3", and "012" instead of "12")
busnum=$(printf %03d $busnum)
devnum=$(printf %03d $devnum)

# now, we can retrieve device data by   lsusb -D /dev/bus/usb/$busnum/$devnum

echo "busnum=$busnum, devnum=$devnum"

另請注意,udev可以直接返回這些busnumdevnum:在RUN+="..."我們可以分別使用替換$attr{busnum}$attr{devnum}

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