MicroPython 内核开发
由于本教程内容主要聚焦于应用 MicroPython 编写传感器模块驱动程序和简单程序开发以及如何使用树莓派 Pico 入门 MCU 编程,因此对本节内容仅作简单概述。
首先,我们需要了解基本名词:
- 源码:就是 MicroPython 本身的程序代码(用 C 语言和 Python 写的),我们要先拿到这些代码,才能后续研究和修改;
- 构建环境:你电脑上需要安装的“工具套装”,用来把源码“翻译成”硬件能直接运行的程序(也就是“固件”);
- 编译器:把你写的 Python 代码,转换成一种“中间代码”(字节码)的工具,硬件上的 MicroPython 解释器能直接读懂字节码;
- 内存管理:MicroPython 在硬件上运行时,如何“管理内存空间”(比如存储变量、程序数据),避免内存浪费或溢出;
- C 扩展:用 C 语言给 MicroPython 新增功能(因为 C 语言运行快、更贴近硬件),比如新增一个控制特定传感器的功能模块;
- 移植:把 MicroPython“适配”到新的硬件上(比如一款新的单片机),让这款硬件也能运行 MicroPython。
关于 MicroPython 内核开发具体内容可以参考:https://docs.micropython.org/en/latest/develop/index.html。

MicroPython Internals 这章是为想从入门到能动手贡献代码的开发者准备的实操型教程。它从最基础的源码获取、构建环境搭建讲起,逐步带你理解编译器如何把 Python 代码变成字节码、运行时如何管理对象和内存,以及如何用 C 写扩展模块或把 MicroPython 移植到新的硬件平台。
主要包括以下内容:
- 入门(Getting Started):
- 使用 git 获取源码(git 是管理代码的工具,就像“代码版百度云”,能方便获取和更新源码);
- 列出依赖项与构建工具;如何构建 cross-compiler(mpy-cross)(mpy-cross,跨编译器,能在你的电脑上为其他设备比如单片机生成可运行的代码)以及在不同目标的端口(Unix、Windows、STM32,不同“端口”就是不同的适配平台)上编译固件。
- 还包括如何生成文档、运行测试套件(验证修改后的代码是否正常工作)、额外的 make 目标(make 是自动化构建工具,“目标”就是要完成的具体任务)、以及本地使用 CI 脚本(ci.sh,自动检查代码是否符合规范的脚本)。
- 提供工程目录/文件结构(告诉你源码文件夹里每个文件、文件夹的作用)说明和如何编写测试的指南。
- 编译器(The Compiler):
- 涵盖从词法(token,把 Python 代码拆成最小的“语法单位”,比如关键词、变量名)、语法(grammar,Python 代码的书写规则)到解析(parsing,检查代码是否符合语法规则,生成语法树)以及编译流程的各个阶段。
- 说明编译器的多轮传递(first/second/third/fourth passes,编译器处理代码的多步流程,逐步优化并生成字节码)、如何发出字节码(生成中间代码)与可选的本地代码生成(直接生成硬件能运行的机器码,运行更快);
- 也讲如何新增语法规则或词法 token(便于扩展 Python 语法或实现新的语言特性,比如给 Python 加一个新的关键词)。
- 内存管理与对象模型(Memory Management):
- 说明 MicroPython 的对象模型(MicroPython 里的一切比如变量、列表、函数,本质都是“对象”,这里讲这些对象的底层结构)、对象的分配策略与内存分配细节(如何给对象分配内存空间);
- 介绍字符串驻留(string interning / QSTR)机制:一种优化内存的方式,把常用的字符串“缓存”起来,避免重复存储,既有编译时生成也有运行时生成的方式;
- 还讨论映射/字典的实现细节(开放寻址、线性探测等,字典是 Python 里的键值对结构,这里讲 MicroPython 如何高效实现字典)。
- 模块与 C 扩展(Implementing a Module / C API):
- 如何实现核心模块(core module,MicroPython 自带的基础模块比如 math)以及一般模块的步骤。
- 公共 C API 的使用方法(C 语言的接口,供你用 C 语言写代码扩展 MicroPython)、如何在 C 中扩展 MicroPython、外部 C 模块的结构与示例。
- 讨论把 native machine code (本地机器码,硬件能直接运行的代码)放进
.mpy 文件的机制、支持的特性与限制;包括如何定义、编译和在 MicroPython 中调用 native/c 模块; - 涵盖在构建模块时使用 Picolibc 的方法与更多示例(Picolibc 是一款适合嵌入式设备的轻量级 C 语言库)。
- 优化与特殊功能:
- 冻结字节码(frozen bytecode)等优化手段:把常用的 Python 模块直接打包进固件,不用每次运行都重新加载,减少内存占用并加速启动;
- 移植(Porting MicroPython):
- 从最小可运行的固件开始,说明如何针对新平台构建 MicroPython port(适配新硬件的过程,包含 stdin/stdout 的支持等,stdin/stdout 就是标准输入输出,比如通过串口接收和发送数据);
- 提供配置说明、构建与运行步骤,以及如何把模块加入到目标端口中(让新硬件能使用新增的功能模块)