Usb
用於確定設備埠的命令(如 /dev/ttyUSB0)
我對 Linux 中的埠有疑問。如果我通過 USB 連接我的設備並想檢查其埠,我無法使用命令 lsusb 來執行此操作,該命令僅指定此匯流排上的匯流排號和設備號:
[ziga@Ziga-PC ~]$ lsusb Bus 003 Device 007: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
**是否有命令告訴我設備直接連接到的埠?**到目前為止,唯一的方法是斷開連接並重新連接並使用以下命令:
[ziga@Ziga-PC ~]$ dmesg | grep tty [ 0.000000] console [tty0] enabled [ 0.929510] 00:09: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A [ 4.378109] systemd[1]: Starting system-getty.slice. [ 4.378543] systemd[1]: Created slice system-getty.slice. [ 8.786474] usb 3-4.4: FTDI USB Serial Device converter now attached to ttyUSB0
在最後一行可以看出我的設備已連接到**/dev/ttyUSB0**。
我不太確定你在問什麼。您多次提到“埠”,但在您的範例中,您說答案是
/dev/ttyUSB0
,這是設備開發路徑,而不是埠。所以這個答案是關於找到每個設備的開發路徑。下面是一個快速而骯髒的腳本,它遍歷設備以
/sys
查找具有ID_SERIAL
屬性的 USB 設備。通常只有真正的 USB 設備才會有這個屬性,所以我們可以用它來過濾。如果我們不這樣做,您會在列表中看到很多不是物理設備的東西。#!/bin/bash for sysdevpath in $(find /sys/bus/usb/devices/usb*/ -name dev); do ( syspath="${sysdevpath%/dev}" devname="$(udevadm info -q name -p $syspath)" [[ "$devname" == "bus/"* ]] && exit eval "$(udevadm info -q property --export -p $syspath)" [[ -z "$ID_SERIAL" ]] && exit echo "/dev/$devname - $ID_SERIAL" ) done
在我的系統上,這會導致以下結果:
/dev/ttyACM0 - LG_Electronics_Inc._LGE_Android_Phone_VS930_4G-991c470 /dev/sdb - Lexar_USB_Flash_Drive_AA26MYU15PJ5QFCL-0:0 /dev/sdb1 - Lexar_USB_Flash_Drive_AA26MYU15PJ5QFCL-0:0 /dev/input/event5 - Logitech_USB_Receiver /dev/input/mouse1 - Logitech_USB_Receiver /dev/input/event2 - Razer_Razer_Diamondback_3G /dev/input/mouse0 - Razer_Razer_Diamondback_3G /dev/input/event3 - Logitech_HID_compliant_keyboard /dev/input/event4 - Logitech_HID_compliant_keyboard
解釋:
find /sys/bus/usb/devices/usb*/ -name dev
顯示的設備在其目錄中
/dev
有一個文件。所以我們搜尋符合這個條件的目錄。dev``/sys
syspath="${sysdevpath%/dev}"
我們想要目錄路徑,所以我們去掉
/dev
.
devname="$(udevadm info -q name -p $syspath)"
這為我們提供了
/dev
與該/sys
設備對應的路徑。
[[ "$devname" == "bus/"* ]] && exit
這會過濾掉不是實際設備的東西。否則,您將獲得 USB 控制器和集線器之類的東西。
exit
退出子shell,它流向循環的下一次迭代。
eval "$(udevadm info -q property --export -p $syspath)"
該
udevadm info -q property --export
命令以一種可以由 shell 解析為變數的格式列出所有設備屬性。所以我們簡單地呼叫eval
這個。這也是我們將程式碼包裝在括號中的原因,以便我們使用子shell,並且變數在每個循環中都會被擦除。
[[ -z "$ID_SERIAL" ]] && exit
對不是實際設備的事物進行更多過濾。
echo "/dev/$devname - $ID_SERIAL"
我希望你知道這條線是做什麼的:-)