Usb

確定設備插入的 USB 埠

  • August 11, 2019

我正在編寫自定義 Bash 腳本,用於批量複製 USB 快閃記憶體和批量測試(使用f3)。

我想知道是否有可能辨識出插入了筆式驅動器的 USB 埠。

我有帶有編號埠的 USB 集線器。如果有一些靜態地址我可以辨識並知道是否插入了某些東西,那是什麼(本質上:哪個 /dev/sd* 文件對應於那個 USB 埠)我可以讓使用者更容易了解正在發生的事情並允許他們在此過程的早期移除壞驅動器,而無需等到整個批次處理完畢,然後嘗試從好驅動器中挑選出壞驅動器(這就是我現在的做法)。

我嘗試四處搜尋,但沒有發現任何東西似乎與我想要實現的目標相吻合,所以我決定在這種情況下直接尋求幫助。

現在我通過 /dev/sd* 節點名稱辨識驅動器,而使用者不知道那是什麼。如果我可以將這些映射到集線器中的 USB 埠,我可以根據 USB 埠呈現資訊,並且使用者可以知道埠 5 插入了錯誤的驅動器,他們可以將其刪除,而不會干擾正在進行的其餘過程.

然後我什至可以停止批量執行此操作並讓所有埠同時循環工作,使用者可以一直插入和拔出驅動器,跟踪 HUB 埠號是什麼,它可以極大地促進工作流程.

所以基本問題是:如何辨識 USB 埠和插入這些埠的 USB 快閃記憶體?

您可以udevadm用來獲取某些設備的設備路徑。這是通過檢查 中的符號連結來完成的/sys/,因此您也可以手動執行此操作(但更易於使用udevadm)。

例如,插入我係統上的外部 USB 集線器的 USB 記憶棒會產生

$ udevadm info -q path -n /dev/sdh
/devices/pci0000:00/0000:00:1d.0/usb3/3-1/3-1.1/3-1.1.3/3-1.1.3.2/3-1.1.3.2:1.0/host7/target7:0:0/7:0:0:0/block/sdh

通過與 USB 樹的比較可以看出,

$ lsusb -t
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 5000M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
   |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/8p, 480M
       |__ Port 1: Dev 26, If 0, Class=Hub, Driver=hub/4p, 480M
           |__ Port 3: Dev 29, If 0, Class=Hub, Driver=hub/4p, 480M
               |__ Port 2: Dev 31, If 0, Class=Mass Storage, Driver=usb-storage, 480M
               |__ Port 4: Dev 30, If 0, Class=Mass Storage, Driver=usb-storage, 480M
...

路徑的一部分3-1.1.3.2說,在匯流排 3 上,它通過埠 1(在南橋上),再次通過埠 1(在主機板上),埠 3(仍在主機板上),然後通過外部 USB 集線器的埠 2。該集線器的埠 4 用於 SD 卡讀卡器。

因此,根據您的 USB 集線器的連接方式,您需要做類似的事情,並提取您感興趣的最後一個埠。

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