WSL2連線USB裝置(以USRP B210為例)

月光下的犹大發表於2024-07-11

使用WSL2時,發現其無法直接識別到宿主機上插入的USB裝置。

可利用USPIPD-WIN專案進行連線。

以下以USRP B210裝置連線為例,展示連線過程:

安裝USBIPD-WIN 專案

參考連線 USB 裝置 | Microsoft Learn,我選擇透過.msi檔案安裝:

  1. 轉到 usbipd-win 專案的最新發布頁
  2. 選擇 .msi 檔案,該檔案將下載安裝程式。 (你可能會收到一條警告,要求你確認你信任此下載)。
  3. 執行下載的 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中執行(實際上,只有第二步需要管理員許可權,而第二步共享過一次後似乎會一直保持共享狀態,之後可以跳過此步,也無需使用管理員模式):

  1. 先列出所有連線到 Windows 的 USB 裝置。 列出裝置後,選擇並複製要附加到 WSL 的裝置匯流排 ID(使用BUSID欄位即可)。

    udbipd list
    

  1. 在附加 USB 裝置之前,必須使用命令 usbipd bind 來共享裝置,從而允許它附加到 WSL。 這需要管理員許可權。 選擇要在 WSL 中使用的裝置匯流排 ID,然後執行以下命令。 執行命令後,請再次使用命令 usbipd list 驗證裝置是否已共享。

    由圖可知,USRP B210裝置的BUSID為2-1,故執行:

    usbipd bind --busid 2-1
    

    對於某臺裝置,似乎是執行過一次該命令後便持久有效,重新插入裝置或重啟主機之後依然為Shared狀態

  2. 若要附加 USB 裝置,請執行以下命令。 (此處無需管理員許可權)請注意,只要 USB 裝置連線到 WSL,Windows 將無法使用它。 附加到 WSL 後,任何作為 WSL 2 執行的分發版本都可以使用 USB 裝置。 使用 usbipd list 驗證裝置是否已附加。

    usbipd attach --wsl --busid 2-1
    

    執行完後裝置的狀態轉變為Attached

  3. WSL2下,執行以下命令列出附加的USB裝置:

    lsusb
    

  4. 在 WSL 中完成裝置使用後,可物理斷開 USB 裝置,或者從 PowerShell 執行此命令:

    usbipd detach --busid 2-1
    

參考資源

連線 USB 裝置 | Microsoft Learn

WSL2連線USB儲存裝置(保姆級教程,真正做到你奶奶來了也能成功)_wsl2 usb-CSDN部落格

WSL support · dorssel/usbipd-win Wiki (github.com)

相關文章