本篇文章写在2023年的4月,因为Arch滚动更新的特性,我无法确定这篇文章的内容未来是否还正确,仅供大家做参考。
想看对应部分的解释的看问题那一节,不感兴趣只想看指令的看编译那一节。

可能遇到的问题

编译依赖补齐

因为MicroPython官方只提供了以Ubuntu为参考的编译依赖列表,所以我们是不知道缺哪些包的,经过我的试错,得出以下结论。
我是参考Arch Linux官方论坛上的方法进行的Arch的安装。之后也没额外捣鼓过编译组件的事。所以在编译环境这一块,应该和大多数Arch用户差别不大。我们需要额外在安装以下几个包:arm-none-eabi-gcc、arm-none-eabi-newlib、cmake。吐槽一下,其实这几个包在官方教程里都或多或少的提到了,但前两个说的是只在编译STM32固件时需要,整的我还以为进错目录了;后者则是在仓库里rp2目录下的readme文件提到的。只能说官方文档真该更新下了。

sudo pacman -S arm-none-eabi-gcc arm-none-eabi-newlib cmake

这样下来编译依赖的问题就解决了。

加载子模块

到这一步,按理说有足够Git使用经验的朋友就可以自行编译了。不过也不知道是为什么,MicroPython项目中用到了子模块,但完全没在教程里提到这回事。而说实话不少入门的Git教程压根没讲这功能。我之前不怎么用Git,就成功在这里踩雷了。MicroPython 中使用了多个子模块,如果没有对他们完成初始化并更新就会导致编译时报错。

#在项目的根目录执行以下指令
git submodule init
git submodule update

在拉取子模块时Git是根据.gitsubmodule这个文件里的链接来进行的。如果你网络不太好我建议你用什么码云之类的中转下,这里不详细讲了。

编译过程

安装编译依赖

sudo pacman -S arm-none-eabi-gcc arm-none-eabi-newlib cmake

克隆仓库和拉取子模块

接下来的步骤就按照官方给出的教程就足够了,姑且也写一下。
第一步是克隆官方的项目并按照上面说的的方法加载子模块。

git clone https://github.com/micropython/micropython.git
git submodule init
git submodule update

编译交叉编译器

cd mpy-cross
make

编译Pico固件

#在 ports/rp2 目录下执行以下指令
make submodules
make clean
make