Usb
將物理 USB 設備路徑映射到 lsusb 返回的匯流排/設備號
我需要獲取連接的 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
。然後進入這個目錄,裡面會有幾個文件。除其他外,還有文件busnum
,devnum
它們包含這些“邏輯”數字。因此,在 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
可以直接返回這些busnum
和devnum
:在RUN+="..."
我們可以分別使用替換$attr{busnum}
和$attr{devnum}
。