当前位置:首页>python>从入门到贡献:MicroPython 内核开发的科普与入门路径

从入门到贡献:MicroPython 内核开发的科普与入门路径

  • 2026-09-02 16:59:32
从入门到贡献:MicroPython 内核开发的科普与入门路径

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 就是标准输入输出,比如通过串口接收和发送数据);
    • 提供配置说明、构建与运行步骤,以及如何把模块加入到目标端口中(让新硬件能使用新增的功能模块)

最新文章

随机文章