WSL 使用实战:如何在 Windows 下轻松映射 USB 设备到 Linux 子系统

对于习惯在 Windows 下使用 WSL (Windows Subsystem for Linux) 进行开发的童鞋来说,经常会遇到一个痛点:WSL 默认情况下是看不见主机上插着的 USB 设备的。这在需要连接开发板、调试真机或者进行某些 USB 通信开发时简直是灾难。

以前可能需要折腾虚拟机或者复杂的网络转发,但现在借助微软官方开源的 usbipd-win 项目,我们可以非常丝滑地实现 USB 设备的透传。今天就来手把手教大家如何操作,顺便看看实战效果。

准备工作:安装工具

首先,你的 Windows 上需要安装 usbipd 这个工具。它是一个开源项目,可以通过 winget 直接安装,非常方便:

winget install usbipd

安装完成后,建议重启一下终端,确保环境变量生效。接下来我们就可以开始激动人心的设备映射了。

第一步:查看所有 USB 设备

以管理员身份打开终端(PowerShell 或 CMD 均可),输入以下命令来查看当前连接的所有 USB 设备:

usbipd list

你会看到一个列表,列出了所有连接的设备信息,包括总线 ID (BUSID)、厂商 ID (VID)、产品 ID (PID) 以及设备名称。

例如,我这里能看到我的 Galaxy Z Flip5:

BUSID  VID:PID    DEVICE                                                       STATE
1-7    04e8:6860  Galaxy Z Flip5, USB 串行设备 (COM4), ADB Interface          Not shared

注意最右侧的 STATE,现在默认都是 Not shared,说明这些设备目前还独占于 Windows,WSL 看不到它们。

第二步:绑定目标设备

在把设备扔给 WSL 之前,我们需要先告诉 Windows:“这个设备我要借给 WSL 用了,你别独占”。这一步叫做“绑定”。

记下你想映射设备的 BUSID(比如刚才的 1-7),执行绑定命令:

usbipd bind --busid 1-7

执行成功后,该设备的状态通常会发生变化,表示它已经被 usbipd 接管了。

第三步:附加到 WSL

这是最关键的一步。我们将刚才绑定的设备“附加”到 WSL 实例中。输入以下命令:

usbipd attach --wsl --busid 1-7

这条命令的意思是,将 BUSID 为 1-7 的设备附加到默认的 WSL 发行版中。操作完成后,你的 Windows 系统可能会发出一声设备拔出再插入的提示音(这很正常,因为设备的控制权已经移交给 WSL 内核了)。

此时会发生什么?

现在,打开你的 WSL 终端(例如 Ubuntu),输入 lsusb,你应该能惊喜地发现,刚才那台手机已经出现在列表里了!

以我的操作为例,映射成功后,我在 WSL 中直接使用 adb 命令进行调试,一切如丝般顺滑:

adb kill-server
adb shell cat /data/local/tmp/root_out

随后设备返回了执行结果和 root 权限信息,说明 WSL 已经完美接管了硬件通信。

恢复设备与解绑

当你用完了,想把这个设备还给 Windows,或者要把设备插到别的电脑上时,切回到 Windows 的管理员终端,执行以下命令进行分离:

usbipd detach --busid 1-7

如果你不再需要 usbipd 管理这个设备,可以执行解绑命令,让 Windows 原生驱动重新接管:

usbipd unbind --busid 1-7

至此,整个“借用”流程就完美闭环了。

小贴士

  1. 权限问题:始终记得使用管理员权限运行 PowerShell,否则无法绑定硬件。
  2. WSL 版本:建议使用 WSL 2,其对硬件透传的支持更加完善和稳定。
  3. 设备兼容性:绝大多数 USB 设备都支持,但极少数特定驱动设备可能会遇到兼容性问题,此时拔出重插通常能解决。

有了这个技能,Windows + WSL 的开发体验又上了一个台阶,再也不用为了刷个机或者调试个串口设备而重启电脑进 Linux 了!赶紧去试试吧。

标签: none

AI Skills Smart Station on Nick Launches

评论已关闭