ESP-IDF 工具和安装流程优化
中国,上海
2021年8月27日
ESP-IDF 是乐鑫官方的物联网开发框架,自 2016 年发布以来不断完善,现已支持数以亿计物联网设备,并开发构建了多样的物联网产品。ESP-IDF 在设计之初仅是为了方便命令行界面 (CLI) 的使用,但在过去几年中,我们收到了很多客户对于简化 ESP-IDF 安装和使用流程的反馈意见,我们也对重要问题进行了评估与优化。本文将详细介绍我们最近的优化措施。
构建系统
ESP-IDF 首次发布时使用的是以 GNU Make 为核心的构建系统。该构建系统十分灵活,能够快速使用 ESP-IDF 代码库,并在 Linux 和 macOS 操作系统(当时大多数乐鑫开发人员使用的操作系统)上运行良好。然而,它也存在一些问题:最主要问题是,GNU Make 在 Windows 系统上运行时,还需要一个像 MSYS 或 Cygwin 这样的仿真层。也就是说使用相同的硬件构建项目时,在 Windows 上的速度会比 Linux 慢很多。另一个问题是无法安全可靠地将基于 GNU Make 的项目添加到集成开发环境 (IDE) 中。基于此,我们当时在 ESP-IDF 文档中提供了关于“如何使用集成了 GNU Make 构建系统的 Eclipse CDT”的说明。虽然这种方法在大多数情况下都奏效,但一旦出现问题(以 Windows 为主),则很难排除故障。
为解决上述问题,ESP-IDF 从 2018 年开始转向使用以 CMake 为核心的新构建系统。虽然我们一直尽可能尝试不改变 ESP-IDF 的使用体验,但这一调整对于很多正在使用 ESP-IDF 开发项目的用户来说,仍存在明显的使用差异。于是我们决定在开发新的基于 CMake 的构建系统的同时,继续支持基于 Make 的构建系统。后来,在 2020 年 2 月发布的 ESP-IDF v4.0 中,我们开始将基于 CMake 的构建系统作为默认构建系统,并将基于 Make 的构建系统降至“Legacy”状态。此后,我们便仅在基于 CMake 的构建系统中添加新功能,例如对 ESP32-S2、ESP32-C3 和 ESP32-S3 芯片的支持。
使用基于 CMake 的构建系统能够更好地集成 IDE。2019 年,我们开始开发 Visual Studio (VS) Code 和 Eclipse 两个 IDE 插件,以便直接在 IDE 中使用 ESP-IDF 的特定功能,大大简化了 ESP-IDF 的入门流程。
工具和安装
ESP-IDF 的使用还依赖于各种工具,如交叉编译工具链和调试工具。乐鑫为每种操作系统都提供二进制发行版的工具集。在 ESP-IDF v4.0 之前,用户需要完全自主地设置环境:先在电脑上下载并解压正确版本的工具链,然后将其添加到“PATH”环境变量中。但自主设置环境,尤其在需要切换不同 ESP-IDF 版本时很容易出错,于是我们在 ESP-IDF v4.0 的 SDK 中添加了新脚本,支持用户自动设置正确版本的工具。它也提供了安装方式的选项,支持电脑安装多个 ESP-IDF 版本,并使用正确版本的工具链,互不冲突。
今年,我们对 ESP-IDF 工具安装器进行了全面调整,进一步改善了 Windows 用户的工具安装过程。我们详细分析了之前 ESP-IDF 安装过程的问题报告,并在这次更新中解决了主要出错问题:首先,工具安装器现在已可以安装 Python 解释器和 Git 的独立副本,使 ESP-IDF 不再受电脑上已安装版本的影响;其次,工具安装器会使用 Python 包的备用下载源 (“wheels”),防止某些包无法从官方来源获得;再次,工具安装器还会额外检查工具安装的前提条件,有助于检测出杀毒软件、安装目录和其他可能存在的潜在问题。目前,工具安装器有以下两个版本:在线版本仅包含一个最小的安装包,会在安装过程中下载所需软件;离线版本则包含了所有必要的软件内容。
我们将持续收集开发者们对 ESP-IDF 工具和安装流程的反馈,并不断优化和改进。
集成开发环境
除命令行界面外,乐鑫还为 ESP-IDF 用户提供了两种开发环境:ESP-IDF Visual Studio (VS) Code 插件和 ESP-IDF Eclipse 插件。这两种环境自 2019 年以来就在持续开发和维护中。今年,我们的 IDE 开发工作主要集中在三个方面:简化安装和入门流程、提升核心开发体验(例如创建和配置项目、代码索引、烧录、查看日志),以及改进 JTAG 调试体验。
我们参考了 Windows 版 IDF 工具安装器的优化经验,也对上述两个 IDE 的入门流程进行了优化。现在,Windows 用户可以直接使用离线版工具安装器安装 Eclipse 和 IDF 插件。用户使用 VS Code 插件只需几个步骤即可完成 ESP-IDF 的入门操作。我们还实现了 VS Code 插件与 esp-idf.json 的集成,并在 VS Code 中嵌入了 Python(使用乐鑫的 pip 下载源)和 Git,以便在 Windows 环境下尽可能实现 ESP-IDF 入门流程的自动化。
由于 ESP32-S3 和 ESP32-C3 新款芯片包含嵌入式 USB-JTAG 接口,我们也对 IDE 的 JTAG 功能做了相应改进。除了串口烧写外,还增加了对 JTAG 烧写的支持。用户使用 IDF Eclipse 插件(v2.2.0 及后续版本)和 OpenOCD 插件(v0.10.0-esp32-20201125 及后续版本),只需在启动配置中选择 JTAG 烧录选项,并选择合适的开发板,即可通过 JTAG 运行应用程序。此外,我们现已将 JTAG 烧录设定为默认选项,避免用户在设备调试前忘记烧录程序的情况。如果用户没有安装所需的 OpenOCD 版本,我们会发送安装提示信息,同时也会提醒他们安装最新版本。
VS Code 和 Eclipse 都具有堆跟踪功能,允许用户通过调试(在代码中添加开始/停止断点)生成 svdat 转储文件,并进行堆转储分析。此功能可用于分析堆事件和内存分配,检测可能发生的内存泄漏问题。
未来的计划
我们在改善 ESP-IDF 开发者体验方面的工作不止于此。除了对现有工具的改进,我们也在探索新的解决方案,如容器化、在线编程和原型工作空间 (prototyping workspaces)。欢迎您通过 ESP32 论坛或 GitHub 仓库(如 ESP-IDF、IDF-Eclipse-plugin 和 VSCode-ESP-IDF-extension)向我们提供反馈意见。