WSL 使用实战:如何在 Windows 下轻松映射 USB 设备到 Linux 子系统
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
至此,整个“借用”流程就完美闭环了。
小贴士
- 权限问题:始终记得使用管理员权限运行 PowerShell,否则无法绑定硬件。
- WSL 版本:建议使用 WSL 2,其对硬件透传的支持更加完善和稳定。
- 设备兼容性:绝大多数 USB 设备都支持,但极少数特定驱动设备可能会遇到兼容性问题,此时拔出重插通常能解决。
有了这个技能,Windows + WSL 的开发体验又上了一个台阶,再也不用为了刷个机或者调试个串口设备而重启电脑进 Linux 了!赶紧去试试吧。

评论已关闭