ESP-IDF工具配置原理简要梳理

ESP-IDF工具配置原理简要梳理

详细安装步骤在ESP-IDF V4.3 编程指南-快速入门下的页面有进行了详细的介绍,包括多系统支持(Windows、Linux和macOS)。此处仅对在配置过程中收获的知识、经验进行讨论,另外也对部分配置步骤进行记录,以方便后续开发时的查询需要,毕竟不会经常使用ESP-IDF,容易遗忘!ESP-IDF稳定版本入口(可切换版本)。

注:我自己在安装ESP-IDF工具时是将其安装在Win10下的VMWare虚拟机(Ubuntu 20.04.4)中。

理解ESP-IDF安装过程

ESP-IDF的安装过程可以简单归纳为”下载GIthub仓库”、”执行安装脚本”、”激活环境/工具”这3个过程。事实上,前两部已经完成安装,第3步仅仅是配置环境变量,让ESP-IDF的工具命令能被你的终端识别!

由于我这人对技术实现细节比较爱深究,于是就干脆捋一下安装命令所做的工作,这对往后工具库包的开发也有参考价值。安装脚本主要行为如下(快速到达V4.3版本安装脚本):

  • 命令export IDF_PATH=$(cd $(dirname $0); pwd)将当前脚本文件所在目录绝对路径存储到环境变量 IDF_PATH 。$(cd $(dirname $0); pwd) 子命令将当前脚本文件所在目录切换到工作目录,并通过 pwd 获取绝对路径。
  • 命令. ${IDF_PATH}/tools/detect_python.sh执行 ${IDF_PATH}/tools/detect_python.sh 脚本文件。这个脚本用于检测和确定可用的 Python 解释器,并将其设置到环境变量 ESP_PYTHON 中。
  • 以下命令根据脚本运行时传入的参数个数来设置 TARGETS 变量。如果没有传入参数,则将 TARGETS 设置为字符串 “all”;否则,将第一个参数赋值给 TARGETS。
if [ "$#" -eq 0 ]; then
  TARGETS="all"
else
  TARGETS=$1
fi
  • 命令${ESP_PYTHON} ${IDF_PATH}/tools/idf_tools.py install --targets=${TARGETS}执行 ${ESP_PYTHON} 变量所指定的 Python 解释器,并运行 ${IDF_PATH}/tools/idf_tools.py 脚本文件,并传入 install 命令以及 –targets= 参数,参数值为之前设置的 TARGETS 变量的值。这个命令用于安装 ESP-IDF 工具。
  • 命令${ESP_PYTHON} ${IDF_PATH}/tools/idf_tools.py install-python-env使用 ${ESP_PYTHON} 变量所指定的 Python 解释器执行 ${IDF_PATH}/tools/idf_tools.py 脚本文件,同时传入 install-python-env 命令。

继续深入idf_tools.py脚本,当传入 install 参数时,会安装ESP-IDF工具(子参数–targets的值默认为”all”,将安装所有支持目标板的工具)。具体安装的工具如下:

  • ESP-IDF框架本身及其组件,包括编译器、链接器、调试工具等。
  • ESP32和ESP32-S系列芯片的特定工具链和SDK。
  • ESP-IDF工具链的依赖项和支持库,如CMake、Ninja、Python环境等。
  • 与目标板相关的工具,如烧录工具、串口调试工具等。

当传入 install-python-env,该工具会在~/.espressif 下创建单独的 Python virtualenv 虚拟环境,并安装Python 库依赖!该做法很好地实现了和系统Python的环境隔离。

激活 ESP-IDF 环境

ESP-IDF激活命令十分简洁,与Python虚拟环境的激活方式类似:首先进入 esp-idf 工程的根目录(激活脚本所在目录),执行以下命令:

source ./export.sh

该指令的主要功能如下:

主要功能如下:

  • 设置环境变量:设置必要的环境变量,以确保 ESP-IDF 工具链和组件能够正确地被访问和使用。这些环境变量包括 IDF_PATH(指向 ESP-IDF 的安装路径)、PATH(将 ESP-IDF 工具链添加到系统 PATH 中,以供命令行访问)、PYTHONPATH(将 ESP-IDF Python 工具库路径添加到 Python 模块搜索路径中)等。
  • 配置工具链路径:设置工具链路径,以便在构建过程中能够正确地调用编译器、链接器和其他构建工具。
  • 配置 IDF 版本:检查 ESP-IDF 版本,根据需要进行相关的设置和兼容性检查,以确保与指定的 ESP-IDF 版本兼容。
  • 配置构建系统:为 ESP-IDF 配置构建系统,例如设置默认分区表和编译选项,以便生成特定芯片的固件。

安装多个 ESP-IDF 版本

从前面的描述可知,ESP-IDF的安装本质是工具的下载和环境变量的配置,因此,安装另一个版本的 ESP-IDF 完全可以通过重复一遍安装过程来实现。举个直观的例子,当我首次安装4.3版本的ESP-IDF后,在安装目录,可以看到以下文件/文件夹:

v4.3

而在安装完新的5.2版本后,安装目录变动如下:

v5.2

注,安装完新版本后,安装目录下idf-env.json文件的内容只包含最新安装的环境,例如:

{
    "idfInstalled": {
        "/home/leechan/esp/esp-idf-ver-box/esp-idf-v5.2": {
            "version": "5.2",
            "path": "/home/leechan/esp/esp-idf-ver-box/esp-idf",
            "features": [
                "core"
            ],
            "targets": [
                "esp32c2",
                "esp32s2",
                "esp32c6",
                "esp32c3",
                "esp32",
                "esp32s3",
                "esp32h2",
                "esp32p4"
            ]
        }
    }
}

此时激活旧环境,若出现KeyError: 'idfSelectedId'错误(issue),一个可行的解决方法是将该JSON文件删除(建议先备份)。至此就能够使用多个版本的 ESP-IDF 啦!

leechan@leechan-virtual-machine:~/esp/esp-idf$ idf.py --version
ESP-IDF v4.3.2
leechan@leechan-virtual-machine:~/esp/esp-idf-ver-box/esp-idf$ idf.py --version
ESP-IDF v5.2-dev-2383-g82cceabc6e

注:须在不同终端下激活不同版本的ESP-IDF,否则在转换版本时,即执行另一个ESP-IDF版本的export.sh时可能出现失败的情况。

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    请登录后查看评论内容