安装前准备:
$ brew install cmake ninja dfu-util
$ brew install ccache # 可选, 加快构建速度
$ echo 'PATH=/opt/homebrew/opt/ccache/libexec:$PATH' >>~/.bashrc
# 确保系统是 python 3 版本且没有激活 venv,否则后续执行 install.sh 脚本会失败。
# 但是执行完 install.sh 脚本后,可以继续激活 venv。
# 如果当前 python 位于 venv 中,则需要关闭。
$ which python3
/Users/alizj/.venv/bin/python3
$ source /Users/alizj/.venv/bin/activate && deactive
# 从 PATH 中临时删除 /Users/alizj/.venv/bin 目录。
$ export DIR_TO_REMOVE=/Users/alizj/.venv/bin
$ export PATH=$(echo $PATH | sed -e "s;:$DIR_TO_REMOVE;;" -e "s;$DIR_TO_REMOVE:;;" -e "s;$DIR_TO_REMOVE;;")
安装 ESP-IDF 到默认的 ~/.espressif/
目录:
$ mkdir -p ~/esp
$ cd ~/esp
$ git clone --recursive https://github.com/espressif/esp-idf.git
$ git checkout -b v5.1.2 tags/v5.1.2 # 使用最新稳定版本
$ cd ~/esp/esp-idf
# 安装指定 CPU target 工具链,如 esp32, esp32s2 等, all 表示支持所有芯片。
$ ./install.sh esp32s3
安装的内容位于 ~/.espressif
目录下:
- openocd-esp32/ : esp32 fork 的 openocd 版本;
- riscv32-esp-elf/ : riscv32 交叉编译工具链;
- xtensa-esp-elf/ : xtensa 交叉编译工具链;
- xtensa-esp-elf-gdb/ : xtensa gdb 调试工具;
zj@a:~/esp/esp-idf$ ls -l ~/.espressif/
total 8.0K
drwxr-xr-x 8 alizj 256 5 5 11:31 dist/
-rw-r--r-- 1 alizj 2.8K 5 5 11:36 espidf.constraints.v5.4.txt
-rw-r--r-- 1 alizj 291 5 5 11:20 idf-env.json
drwxr-xr-x 3 alizj 96 5 5 11:36 python_env/
drwxr-xr-x 8 alizj 256 5 5 11:31 tools/
zj@a:~/esp/esp-idf$ ls -l ~/.espressif/dist/
total 297M
-rw-r--r-- 1 alizj 3.2M 5 5 11:31 esp-rom-elfs-20240305.tar.gz
-rw-r--r-- 1 alizj 16M 5 5 11:31 esp32ulp-elf-2.38_20240113-macos-arm64.tar.gz
-rw-r--r-- 1 alizj 2.3M 5 5 11:31 openocd-esp32-macos-arm64-0.12.0-esp32-20240318.tar.gz
-rw-r--r-- 1 alizj 131M 5 5 11:28 riscv32-esp-elf-13.2.0_20240305-aarch64-apple-darwin.tar.xz
-rw-r--r-- 1 alizj 96M 5 5 11:21 xtensa-esp-elf-13.2.0_20240305-aarch64-apple-darwin.tar.xz
-rw-r--r-- 1 alizj 36M 5 5 11:20 xtensa-esp-elf-gdb-14.2_20240403-aarch64-apple-darwin21.1.tar.gz
zj@a:~/esp/esp-idf$ ls -l ~/.espressif/tools/
total 0
drwxr-xr-x 3 alizj 96 5 5 11:31 esp-rom-elfs/
drwxr-xr-x 3 alizj 96 5 5 11:31 esp32ulp-elf/
drwxr-xr-x 3 alizj 96 5 5 11:31 openocd-esp32/
drwxr-xr-x 3 alizj 96 5 5 11:28 riscv32-esp-elf/
drwxr-xr-x 3 alizj 96 5 5 11:21 xtensa-esp-elf/
drwxr-xr-x 3 alizj 96 5 5 11:20 xtensa-esp-elf-gdb/
后续每次使用 esp-idf 前需要先 source ~/esp/esp-idf/export.sh
脚本。
该脚本会检查 esp-idf 依赖的 python 版本、python 依赖包的情况,然后将 ~/.espressif/
下的各级 bin 目录添加到 PATH
环境变量中。
# export.sh 脚本不能移动位置,且必须 source 使用。
zj@a:~/esp/esp-idf$ source ~/esp/esp-idf/export.sh
...
Done! You can now compile ESP-IDF projects.
Go to the project directory and run:
idf.py build
# 来源于 xtensa-esp-elf
zj@a:~/esp/esp-idf$ which xtensa-esp32s3-elf-gcc
/Users/alizj/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240305/xtensa-esp-elf/bin/xtensa-esp32s3-elf-gcc
# 来源于 xtensa-esp-elf-gdb
zj@a:~/esp/esp-idf$ which xtensa-esp32s3-elf-gdb
/Users/alizj/.espressif/tools/xtensa-esp-elf-gdb/14.2_20240403/xtensa-esp-elf-gdb/bin/xtensa-esp32s3-elf-gdb
# 其它程序
zj@a:~/esp/esp-idf$ xtensa-esp32s3-elf-
xtensa-esp32s3-elf-addr2line xtensa-esp32s3-elf-cc xtensa-esp32s3-elf-gcc-13.2.0 xtensa-esp32s3-elf-gcov-dump xtensa-esp32s3-elf-ld.bfd xtensa-esp32s3-elf-ranlib
xtensa-esp32s3-elf-ar xtensa-esp32s3-elf-cpp xtensa-esp32s3-elf-gcc-ar xtensa-esp32s3-elf-gcov-tool xtensa-esp32s3-elf-lto-dump xtensa-esp32s3-elf-readelf
xtensa-esp32s3-elf-as xtensa-esp32s3-elf-elfedit xtensa-esp32s3-elf-gcc-nm xtensa-esp32s3-elf-gdb xtensa-esp32s3-elf-nm xtensa-esp32s3-elf-size
xtensa-esp32s3-elf-c++ xtensa-esp32s3-elf-g++ xtensa-esp32s3-elf-gcc-ranlib xtensa-esp32s3-elf-gprof xtensa-esp32s3-elf-objcopy xtensa-esp32s3-elf-strings
xtensa-esp32s3-elf-c++filt xtensa-esp32s3-elf-gcc xtensa-esp32s3-elf-gcov xtensa-esp32s3-elf-ld xtensa-esp32s3-elf-objdump xtensa-esp32s3-elf-strip