转载自:https://learn.microsoft.com/zh-cn/windows/wsl/connect-usb
本指南将演练使用 USB/IP 开源项目 usbipd-win 将 USB 设备连接到 WSL 2 上运行的 Linux 分发版所需的步骤。
在 Windows 计算机上配置 USB/IP 项目可以实现常见的开发者 USB 场景,例如刷写 Arduino 或访问智能卡读卡器。
先决条件
- 运行 Windows 11(内部版本 22000 或更高版本)。 (Windows 10 支持是可能的,请参阅以下说明)。
- 需要具有 x64 或 ARM64 处理器的计算机。 (x86 目前不支持 usbipd-win)。
- WSL 已安装并设置为最新版本。
- 已安装并 设置为 WSL 2 的 Linux 分发版。
备注
若要检查 Windows 版本和内部版本号,请选择 Windows 徽标键 + R,键入 winver,选择“ 确定”。 您可以通过选择 开始>设置>Windows 更新>检查更新来更新到最新的 Windows 版本。 若要检查 Linux 内核版本,请打开 Linux 分发版并输入以下命令: uname -a
若要手动更新到最新内核,请打开 PowerShell 并输入命令: wsl --update
重要
WSL 现在通过 Microsoft 应用商店支持 Windows 10 和 Windows 11,这意味着 Windows 10 用户现在可以访问最新的内核版本,而无需从源进行编译。 请参阅 适用于 Windows 10 和 11 的 WSL,现已在微软应用商店中普遍可用 ,了解如何更新到受微软应用商店支持的 WSL 版本。 如果无法更新到支持应用商店的 WSL 版本并自动接收内核更新,请参阅 USBIPD-WIN 项目存储库 ,了解如何通过生成启用了自己的 USBIP 的 WSL 2 内核将 USB 设备连接到 WSL 2 上运行的 Linux 分发版。
安装 USBIPD-WIN 项目
WSL不提供本机连接USB设备的支持,因此需要安装开源项目usbipd-win。
内核要求
若要将 USBIPD 与适用于 Linux 的 Windows 子系统配合使用(WSL),需要具有 5.10.60.1 或更高版本的 Linux 内核版本。 如果已安装的内核版本早于 5.10.60.1,则可以通过先关闭 WSL wsl --shutdown
的任何正在运行的实例来更新它,然后运行以下命令: wsl --update
在 WSL 上安装 USBIPD
- 转到 usbipd-win 项目的最新发布页面。
- 选择 .msi 文件,该文件将下载安装程序。 (你可能会收到一条警告,要求你确认你信任此下载)。
- 运行下载 usbipd-win_x.msi 安装程序文件。
备注
或者,也可以使用 Windows 程序包管理器 (winget)安装 usbipd-win 项目。 如果已安装 winget,只需使用以下命令: winget install --interactive --exact dorssel.usbipd-win
安装 usbipd-win。 如果省略 --interactive,则当需要安装驱动程序时,winget 可能会立即重启计算机。
这将安装:
- 名为
usbipd
的服务,(显示名称:USBIP 设备主机)。 可以使用 Windows 中的服务应用检查此服务的状态。 - 命令行工具
usbipd
。 此工具的位置将添加到 PATH 环境变量。 - 名为
usbipd
的防火墙规则,用于允许所有本地子网连接到服务。 可修改此防火墙规则以微调访问控制。
连接 USB 设备
在附加 USB 设备之前,请确保 WSL 命令行处于打开状态。 这会使 WSL 2 轻型 VM 保持运行。
备注
此文档假定已安装 usbipd-win 5.0.0
或更高版本
-
通过以 管理员 模式打开 PowerShell 并输入以下命令列出连接到 Windows 的所有 USB 设备。 列出设备后,选择并复制要附加到 WSL 的设备总线 ID。
usbipd list
-
在附加 USB 设备之前,必须使用该命令
usbipd bind
来共享设备,从而允许它附加到 WSL。 这需要管理员权限。 选择要在 WSL 中使用的设备的总线 ID,然后运行以下命令。 运行命令后,请再次使用命令usbipd list
验证设备是否共享。usbipd bind --busid 4-4
-
若要附加 USB 设备,请运行以下命令。 (不再需要使用提升的管理员提示。确保 WSL 命令提示符处于打开状态,以使 WSL 2 轻型 VM 保持活动状态。 请注意,只要 USB 设备连接到 WSL,Windows 将无法使用它。 一旦连接到 WSL,任何在 WSL 2 上运行的发行版都可以使用该 USB 设备。 请确认设备是否已连接
usbipd list
。 在 WSL 提示符下,运行lsusb
以验证 USB 设备是否已列出,并且可以使用 Linux 工具与之交互。PowerShellusbipd attach --wsl --busid <busid>
-
打开 Ubuntu(或首选 WSL 命令行),并使用以下命令列出附加的 USB 设备:
Bashlsusb
应会看到刚刚附加的设备,并且能够使用普通 Linux 工具与之交互。 根据应用程序,可能需要配置 udev 规则,以允许非根用户访问设备。
-
在 WSL 中使用设备后,可以物理断开 USB 设备的连接,或者从 PowerShell 运行以下命令:
PowerShellusbipd detach --busid <busid>
若要详细了解此作的工作原理,请参阅 GitHub 上的 Windows 命令行博客 和 usbipd-win 存储库。
有关视频演示,请参阅 WSL 2:连接 USB 设备(选项卡与空格显示)。