使用WSL2時,發現其無法直接識別到宿主機上插入的USB裝置。
可利用USPIPD-WIN專案進行連線。
以下以USRP B210裝置連線為例,展示連線過程:
安裝USBIPD-WIN 專案
參考連線 USB 裝置 | Microsoft Learn,我選擇透過.msi檔案安裝:
- 轉到 usbipd-win 專案的最新發布頁。
- 選擇 .msi 檔案,該檔案將下載安裝程式。 (你可能會收到一條警告,要求你確認你信任此下載)。
- 執行下載的 usbipd-win_x.msi 安裝程式檔案。(選最新版就行)
最終獲得:
- 名為
usbipd
的服務(顯示名稱:USBIP 裝置主機)。 可使用 Windows 中的“服務”應用檢查此服務的狀態。 - 命令列工具
usbipd
。 此工具的位置將新增到 PATH 環境變數。 - 名為
usbipd
的防火牆規則,用於允許所有本地子網連線到服務。 可修改此防火牆規則以微調訪問控制。
在安裝完USBIPD-WIN專案後,基本已經可以直接進行附加USB裝置的流程了,但如果WSL2版本較老,或需要特殊裝置的驅動,則可能需要升級WSL2版本或編譯核心。(詳見WSL support · dorssel/usbipd-win Wiki (github.com))
執行 WSL 核心 5.10.60.1 或更高版本的最新 Windows 版本已經支援 USB 轉串列埠介面卡和快閃記憶體嵌入式開發板等常見應用。只有在需要特殊驅動程式時,才需要為 WSL 2 構建自己的核心。
附加 USB 裝置
在附加 USB 裝置之前,請確保 WSL 命令列已開啟(確保WSL2保持活動狀態)。
以下命令(除第4步外)在管理員模式下 的PowerShell中執行(實際上,只有第二步需要管理員許可權,而第二步共享過一次後似乎會一直保持共享狀態,之後可以跳過此步,也無需使用管理員模式):
-
先列出所有連線到 Windows 的 USB 裝置。 列出裝置後,選擇並複製要附加到 WSL 的裝置匯流排 ID(使用BUSID欄位即可)。
udbipd list
-
在附加 USB 裝置之前,必須使用命令
usbipd bind
來共享裝置,從而允許它附加到 WSL。 這需要管理員許可權。 選擇要在 WSL 中使用的裝置匯流排 ID,然後執行以下命令。 執行命令後,請再次使用命令usbipd list
驗證裝置是否已共享。由圖可知,USRP B210裝置的BUSID為2-1,故執行:
usbipd bind --busid 2-1
對於某臺裝置,似乎是執行過一次該命令後便持久有效,重新插入裝置或重啟主機之後依然為
Shared
狀態 -
若要附加 USB 裝置,請執行以下命令。 (此處無需管理員許可權)請注意,只要 USB 裝置連線到 WSL,Windows 將無法使用它。 附加到 WSL 後,任何作為 WSL 2 執行的分發版本都可以使用 USB 裝置。 使用
usbipd list
驗證裝置是否已附加。usbipd attach --wsl --busid 2-1
執行完後裝置的狀態轉變為
Attached
-
在WSL2下,執行以下命令列出附加的USB裝置:
lsusb
-
在 WSL 中完成裝置使用後,可物理斷開 USB 裝置,或者從 PowerShell 執行此命令:
usbipd detach --busid 2-1
參考資源
連線 USB 裝置 | Microsoft Learn
WSL2連線USB儲存裝置(保姆級教程,真正做到你奶奶來了也能成功)_wsl2 usb-CSDN部落格
WSL support · dorssel/usbipd-win Wiki (github.com)