MicroPython官网有已经编译好的固件,但是出于各种原因(添加第三方库文件、Flash大小不匹配等)我们有时候要自己进行编译。长时间不编译MicroPython,有时候就忘记怎么搞了,所以写一篇报告记录一下编译流程。

目标
为16MByte(128Mbits/8bit)的flash提供支持,加入第三方库ulab(类似于Numpy和scipy的micropython库)
编译环境
Windows11下的wsl2的ubuntu22.04版本
micropython1.19.1版本
ulab5.1.1版本
教程
获取micropython和ulab的源码
git clone https://github.com/v923z/micropython-ulab ulab
git clone https://github.com/micropython/micropython.git
cd micropython
git submodule update --init lib/tinyusb
git submodule update --init lib/pico-sdk
cd lib/pico-sdk
git submodule update --init lib/tinyusb
提示,有时候国内网络抽风连接不上github,从其它镜像站下载的micropython源码在进行git submodule update时可能会现网络错误,可以编辑工程内./.gitmodules文件,将submodule的地址url改为国内可以连接的网站即可,可以再gitee或其他网站上寻找版本一致的工程替换。注意,在micropython和micropython/lib/pico-sdk下均有一份.gitmodules文件。
更改micropython中关于PICO的flash定义
第一处文件是micropython/ports/rp2/rp2_flash.c,将其中的MICROPY_HW_FLASH_STORAGE_BYTES修改为你用来存储自己写的.py .txt等文件的大小
cd ../../ports/rp2/
vim rp2_flash.c
将下面的1408 * 1024修改为 15*1024*1024

第二处文件是micropython/ports/rp2/boards/PICO/mpconfigboard.h,将其中的MICROPY_HW_FLASH_STORAGE_BYTES修改为和上一个一样的值
vim boards/PICO/mpconfigboard.h
将下面的1408 * 1024修改为 15*1024*1024

第三处文件是micropython\lib\pico-sdk\src\boards\include\boards\pico.h中的PICO_FLASH_SIZE_BYTES,这是真实的flash大小
cd ../../lib/pico-sdk/src/boards/include/boards/
vim pico.h
将下面的2 * 1024 * 1024修改为16 * 1024 * 1024

编译
编译mpy-cross工具链
cd ../../../../../../mpy-cross/
make
编译固件
cd ../ports/rp2/
make BOARD=PICO submodules
make USER_C_MODULES=../../../ulab/code/micropython.cmake
输出的uf2文件放在micropython/ports/rp2/build-PICO/firmware.uf2