
在乐鑫ESP开发工作中,Ubuntu Linux是ESP‑IDF官方原生优先支持的操作系统,编译、工具链、USB串口设备均为原生适配,稳定性最好。但很多以Windows为主的工程师,不想额外安装物理Ubuntu主机或者VMware虚拟机,于是会选择WSL2(Windows Subsystem for Linux 2,Windows Linux子系统)。WSL2本质是运行在Windows之上的轻量级虚拟机,可以在Windows里面获得完整的Ubuntu Linux运行环境,代码编译行为和真实物理Ubuntu几乎一致。但二者最大区别在于USB硬件设备访问:原生Ubuntu可以直接识别USB;WSL2本身并不原生支持USB设备直通,需要借助usbipd‑win或idfx工具把USB硬件转发进子系统。本文演示的ESP‑IDF v6.1环境搭建,就是基于WSL2‑Ubuntu开展;同时会对比原生Ubuntu物理机环境差异,方便大家区分两套环境的适用场景、限制以及坑点。硬件目标为S3开发板,使用芯片内置USB‑JTAG完成烧录与调试。
环境搭建指南
1
硬件确认
- 确认板子是芯片内置USB‑JTAG,不是外接FT2232调试器。ESP32‑S3的USB‑OTG引脚用作JTAG,硬件上要确认:USB线接的是USB‑JTAG口,不是普通UART串口。
- Flash大小、是否板载PSRAM:ESP32‑S3常用8MB/16MB Flash,PSRAM是否焊接;后续menuconfig需要对应配置,否则启动异常。
- 晶振:绝大多数S3板子为40MHz晶振。
- USB线缆:必须使用数据USB线,只供电的线材会识别不到JTAG设备。
重点:Windows下ESP32‑S3 USB‑JTAG会生成2个设备:CDC串口(用于日志monitor、烧录)与JTAG调试设备(用于OpenOCD下载调试)。原生Ubuntu环境:USB设备插电脑,系统即可直接识别/dev/ttyACM0,只需配置dialout用户权限,无需额外转发工具。WSL2 Ubuntu环境:WSL原生不能直接访问物理USB设备,必须借助usbipd‑win把USB设备转发进WSL。
2
环境区分
- 原生Ubuntu(物理机/普通虚拟机):标准Linux系统,ESP‑IDF官方首选环境,直接识别USB串口、JTAG硬件,只需配置用户串口权限。
- WSL2‑Ubuntu:Windows内置的Linux子系统,内核由微软虚
- 拟化提供,编译完全等价原生Ubuntu;USB必须第三方工具usbipd‑win转发;同一时刻USB只能归Windows或WSL其中一方占用。
3
工程路径
- 不管是原生Ubuntu还是WSL2‑Ubuntu:IDF仓库、项目工程都应当放在Linux内部文件系统家目录~/下面。
- WSL不要放到/mnt/c这类Windows挂载目录,会出现编译缓慢、CMake异常、文件权限错乱等问题。
- 路径全程禁止中文、空格、特殊符号。
4
系统准备
- Windows设备管理器确认ESP32‑S3 USB‑JTAG无驱动异常,ESP32‑S3内置USB‑JTAG无需CH340驱动,Windows自带驱动即可。
- 提前安装好usbipd‑win,这是WSL访问S3 USB‑JTAG的必备组件;原生Ubuntu不需要安装该工具。
- IDF v6.1对系统依赖要求抬高:Python≥3.10;Ubuntu22.04默认Python3.10满足;Ubuntu20.04会Python版本不足,不推荐。
- IDF v6.1完整支持ESP32‑S3。
- 开发模式:WSL2用Windows端VSCode + Remote‑WSL插件,不要在WSL内部安装VSCode。
- 原生Ubuntu可直接本机安装VSCode。
- 安装esp-idf环境:通过阅读乐鑫开发文档安装,地址是:https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/linux-setup.html
- 预装基础依赖包(原生Ubuntu、WSL2‑Ubuntu命令一致):git、flex、bison等。
- 网络:国外访问github容易超时,准备好乐鑫国内镜像,用于下载工具链。
WSL额外注意:USB转发之后,该硬件设备Windows侧串口工具将无法占用。
5
踩坑汇总
- WSL lsusb看不到ESP32‑S3设备:确认usbipd‑win已经安装;PowerShell管理员运行;正确bind+attach;USB是数据线;设备接在原生USB口,不要用拓展坞。转发到WSL之后Windows设备管理器看不到设备,属于正常现象。原生Ubuntu遇到该问题:优先排查USB线缆、硬件、串口权限。
- 编译成功,idf.py flash找不到串口:WSL:WSL用户没有dialout权限;或者attach设备失败;或者设备被Windows其他串口工具占用。注意:转发USB到WSL之后,Windows端串口助手不能再打开该设备。原生Ubuntu:检查dialout权限,确认/dev/ttyACM*设备是否存在。
- USB‑JTAG OpenOCD无法连接芯片:menuconfig没有开启芯片内置USB‑JTAG;USB接错物理口(接到UART串口);部分开发板需要短接跳线启用USB‑JTAG功能。
- IDF v6.1 install脚本下载工具链超时失败:使用乐鑫国内镜像环境变量,再执行install.sh。
- 工程放在/mnt/c Windows挂载目录,编译各种奇怪报错:硬性要求:源码、IDF、项目全部放在Linux文件系统~/xxx,WSL和原生Ubuntu都要遵守该规则。
- 新开终端idf.py命令找不到:每一次新终端,需要source export.sh;写入.bashrc实现自动加载。














