🚀 WSL 2 救星:5分钟搞定 USB 设备穿透 (usbipd-win 快速上手指南)

如果你是个嵌入式开发者 (ESP32, STM32, Arduino),或者只是想在 WSL 里刷个机,你一定遇到过这个痛点:WSL 2 默认居然看不见 Windows 插上的 USB 设备!

别急,微软官方开源的工具 usbipd-win 就是为了解决这个问题而生的。它能通过网络把 Windows 上的 USB 端口“借”给 WSL 用。

本文带你光速上手,顺便解决常见的“权限报错”和“火绒冲突”问题。


🛠️ 第一步:安装工具 (Windows 端)

在 Windows 11 或 Windows 10 (建议 Win11,体验更丝滑) 上,打开 PowerShell (管理员模式)

使用微软官方包管理器 winget 一键安装:

1
winget install usbipd

安装完成后,弹出的窗口会自动关闭。建议重启一个 PowerShell 窗口以确保环境变量生效。


🔗 第二步:找到你的设备

把你的开发板(比如 ESP32)插上电脑。在 PowerShell 中输入:

1
usbipd list

你会看到类似这样的列表:

1
2
3
BUSID  VID:PID    DEVICE                                                        STATE
1-1 10c4:ea60 Silicon Labs CP210x USB to UART Bridge Not attached
1-2 046d:c53f USB Input Device Not attached

关键点: 记下你设备的 BUSID(比如 1-1)。


⚡ 第三步:连接设备 (穿透到 WSL)

这是最核心的一步。

情况 A:普通连接(无报错)

如果你的电脑很纯净,直接运行:

1
usbipd attach --wsl --busid 1-1

(注意:把 1-1 换成你刚才看到的 ID)

情况 B:遇到“Unknown USB filter”警告(火绒/杀毒软件用户必看)

如果你装了火绒或者其他安全软件,可能会报错:

usbipd: warning: Unknown USB filter 'hrdevmon' ...

别慌,加上 --force 强制绑定即可:

1
2
3
4
5
# 1. 先强制绑定
usbipd bind --force --busid 1-1

# 2. 再进行连接
usbipd attach --wsl --busid 1-1

成功后,Windows 会发出设备拔出的提示音(这是正常的,因为设备被 WSL 抢走了)。


🐧 第四步:在 WSL 里验证与赋权

现在打开你的 WSL 终端 (Ubuntu)。

1. 验证是否看到设备

输入 lsusb,你应该能看到你的设备出现在列表里了。

2. 解决“Permission denied” (最重要的一步!)

默认情况下,普通用户(非 root)没有权限读写 USB 设备。你会遇到:

failed to open port: Permission denied

一劳永逸的解决方法:

把你的用户加入 dialout 用户组(只需执行一次):

1
sudo usermod -aG dialout $USER

注意: 执行完这句后,必须完全关闭 WSL 终端并重新打开,或者注销重新登录才能生效。

临时救急方法:

1
sudo chmod 777 /dev/ttyUSB0

🔌 第五步:用完记得“还”回去

当你不再需要在 WSL 里使用该设备,或者想让 Windows 的串口助手重新识别它时,需要在 Windows PowerShell 里执行:

PowerShell

1
usbipd detach --busid 1-1

或者简单粗暴地:拔掉 USB 线再插回去


📝 常见命令速查表

目的 Windows PowerShell 命令
列出设备 usbipd list
连接设备 usbipd attach --wsl --busid <ID>
强制连接 usbipd bind --force --busid <ID> (仅需一次)
断开设备 usbipd detach --busid <ID>