本教程是连续奋斗了好几天才走向编译成功的。一路都是采坑过来的,为了后面学习者少走弯路少采坑的原则,这里将分享micropython固件编译避坑指南。内容将分几部分组成:环境搭建-工具链安装-编译过程
Linux系统目前对于编译 micropython来说是必须的!这一句话,放在第一句,因为我在这个问题的认知上,折腾了一天。在编译 mpy-coress 时,构建MicroPython交叉编译器,交叉编译器的功能是对高级语言(比如:python、c语言…)翻译成低级语言(比如:汇编语言、机器语言…)的操作。Linux系统环境选择:在大部分人电脑上基本都是使用的Windows运行环境,在Windows环境下安装推荐ubuntu和msys2两个环境下实现MicroPython固件编译。msys2下编译尝试失败了,如果感兴趣的可以参考看:ubuntu不仅仅是因为我编译成功的原因,主要是相对于msys2好配置一些,遇到问题去网上检索找答案容易一些。说通俗一点就是,使用ubuntu的群体比较大。另外一个原因是我的电脑不满足运行虚拟机的条件,还在使用2010年的老电脑,估计好多人早就淘汰掉了12年前的电脑,升级win11都达不到配置要求。
Windows环境安装ubuntu
win10系统下,直接在Windows自带的应用商店下载ubuntu即可。

安装上基本没什么坎。建议你的安装盘符一定要大一点,不然后面安装
espidf和以及相关工具链时会占用很大空间。

Git:sudo apt-get install gitpython3.xx:终端中输入sudo apt install python3.9后按下Enter键来安装Pythongcc:独立安装命令:sudo apt build-dep gcc,也可以通过资源库中,有一个名为 build-essential 的包,它包含 GCC 和其他各种编译器,如 g++ 和 make来安装:安装命令:
- sudo apt update
sudo apt install build-essential
cmake:apt-get install cmakesudo apt-get install gcc-arm-none-eabiesp-idf:通过Git命令克隆: git clone -b v4.4 --recursive https://github.com/espressif/esp-idf.gitmicropython源码克隆: git clone --recursive https://github.com/micropython/micropython.gitGit命令克隆ESP32-IDF和Micropython资源之后,一定要使用git submodule update --init --recursive命令来检查是否将项目完整克隆下来,必须要在git clone ...git之后输入git submodule update --init --recursive按回车之后,没有任何提示符,直接是换行这种状态,才是真正的将项目以及项目中的子模块克隆下来了。(在国内这种环境下,100%是需要在提交克隆命令自后,再提交几次git submodule update --init --recursive按回车才可以将项目完整克隆下来,取决于网络环境)个人ubuntu系统软件安装情况
||/ Name Version Architecture Description
+++-===============================-=======================================-============-========================================>
ii adduser 3.118ubuntu5 all add and remove users and groups
ii apparmor 3.0.4-2ubuntu2.1 amd64 user-space parser utility for AppArmor
ii apport 2.20.11-0ubuntu82.1 all automatically generate crash reports for>
ii apport-symptoms 0.24 all symptom scripts for apport
ii apt 2.4.6 amd64 commandline package manager
ii apt-utils 2.4.6 amd64 package management related utility progr>
ii base-files 12ubuntu4.2 amd64 Debian base system miscellaneous files
ii base-passwd 3.5.52build1 amd64 Debian base system master password and g>
ii bash 5.1-6ubuntu1 amd64 GNU Bourne Again SHell
ii bash-completion 1:2.11-5ubuntu1 all programmable completion for the bash she>
ii bc 1.07.1-3build1 amd64 GNU bc arbitrary precision calculator la>
ii bcache-tools 1.0.8-4ubuntu3 amd64 bcache userspace tools
ii bind9-dnsutils 1:9.18.1-1ubuntu1.1 amd64 Clients provided with BIND 9
ii bind9-host 1:9.18.1-1ubuntu1.1 amd64 DNS Lookup Utility
ii bind9-libs:amd64 1:9.18.1-1ubuntu1.1 amd64 Shared Libraries used by BIND 9
ii binutils 2.38-3ubuntu1 amd64 GNU assembler, linker and binary utiliti>
ii binutils-arm-none-eabi 2.38-3ubuntu1+15build1 amd64 GNU assembler, linker and binary utiliti>
ii binutils-common:amd64 2.38-3ubuntu1 amd64 Common files for the GNU assembler, link>
ii binutils-x86-64-linux-gnu 2.38-3ubuntu1 amd64 GNU binary utilities, for x86-64-linux-g>
ii bolt 0.9.2-1 amd64 system daemon to manage thunderbolt 3 de>
ii bsdextrautils 2.37.2-4ubuntu3 amd64 extra utilities from 4.4BSD-Lite
ii bsdutils 1:2.37.2-4ubuntu3 amd64 basic utilities from 4.4BSD-Lite
ii btrfs-progs 5.16.2-1 amd64 Checksumming Copy on Write Filesystem ut>
ii build-essential 12.9ubuntu3 amd64 Informational list of build-essential pa>
ii busybox-initramfs 1:1.30.1-7ubuntu3 amd64 Standalone shell setup for initramfs
ii busybox-static 1:1.30.1-7ubuntu3 amd64 Standalone rescue shell with tons of bui>
ii byobu 5.133-1 all text window manager, shell multiplexer, >
ii bzip2 1.0.8-5build1 amd64 high-quality block-sorting file compress>
ii ca-certificates 20211016 all Common CA certificates
ii cloud-guest-utils 0.32-22-g45fe84a5-0ubuntu1 all cloud guest utilities
1. cd esp-idf
2. ./install.sh
3. source export.sh
1. cd ../micropython/ports/esp32
2. make
make BOARD=GENERIC_C3
make BOARD=GENERIC_SPIRAM,需要注意的是,在编译前,需要调出:idf.py menuconfig,设置对应的PSRAM大小,如果是8MB PSRAM的只能识别到4MB,其余的4MB需要另外代码中设置。目前编译该固件能识别到PSRAM,但是SPI flash容量为16MB,但是编译出来后,只能识别到4MB的 flash.component config --> ESP32-specific --> SPI RSM config --> Type of SPI RAM chip in use --> Auto-detect,或者选择指定容量的PSRAM。
idf.py set-target esp32
idf.py menuconfig
make BOARD=GENERIC_SPIRAM
SPIRAM与上面的编译时选择
make BOARD=GENERIC_SPIRAM命令编译不同,编译米那里依旧是使用:make BOARD=GENERIC或者是make BOARD=GENERIC BUILD=esp32命令来编译。
- 找到
boards目录里面的sdkconfig.spiram_sx文件,用记事本打开后,头两行是这样的:
CONFIG_ESP32S2_SPIRAM_SUPPORT=y
CONFIG_ESP32S3_SPIRAM_SUPPORT=y
在这两行后面增加一行:
CONFIG_ESP32_SPIRAM_SUPPORT=y
这个文件原生只定义了S2和S3两个板子使用SPIRAM,为了使GENERIC(GENERIC这个boards对应的型号是ESP32,不带S)的板子也使用SPIRAM,因此增加这一行。
boards/GENERIC/mpconfigboard.cmake文件,开头部分是这样的:

set(SDKCONFIG_DEFAULTS
boards/sdkconfig.base
boards/sdkconfig.ble
)
修改一下,增加一行,变成这样:
set(SDKCONFIG_DEFAULTS
boards/sdkconfig.base
boards/sdkconfig.ble
boards/sdkconfig.spiram_sx
)
此部分参考了:《ESP32编译自己的micropython固件以支持OV2640、SPIRAM、bluetooth等完整功能》
16MB固件,版本信息:MicroPython v1.19.1-339-g9a826e0f2-dirty on 2022-08-29; ESP32 module with ESP32
链接:https://pan.baidu.com/s/1dY_tTDVyDOWzGnD11e5clg
提取码:wn4j
8MB的固件,固件版本信息:MicroPython v1.19.1-339-g9a826e0f2-dirty on 2022-08-30; ESP32 module with ESP32 
链接:https://pan.baidu.com/s/1Z3wGAt2uWWn6os2AxrOSOQ
提取码:qsnp
- ✨以上固件仅针对个人使用,不提供任何技术支持,不保证在对应的任意型号的开发板上能正常运行。