> 文档中心 > MicroPython的基本移植步骤和难点

MicroPython的基本移植步骤和难点


移植的基本步骤

MicroPython官方的文档里面给出了移植的说明:https://docs.micropython.org/en/latest/develop/porting.html。其源代码中的ports/minimal是一个非常简单的例子,一般的移植也是从这个文件开始。

移植的过程中有几个要点:

  • mpconfigport.h文件非常重要,这个文件中用一系列MICROPY_开头的宏表示某个功能是否支持。

  • mphalport.h文件包括一些基本硬件相关函数的定义,mphalport.c是对应的函数实现。一般要实现Python的命令行交互(REPL),那么至少要在这个文件中提供对STDIN和STDOUT的支持,通常是对串口的交互支持。

  • 在官方的例子中heap的大小设置为4096,这个设置可能太小了,在测试中经常会导致内存分配不足,可以考虑把它设置的大一些。

  • 如果想快速体验一下官方例子的移植效果,可以在Linux下直接进入ports/minimal目录执行make命令,然后执行make run命令就可以运行MicroPython了。

  • 对于MicroPython的源代码而言,py目录是不可缺少的,它包括全部核心代码,而extmod目录也是非常重要的,它包括MicroPython的扩展库,特别是其中有2个文件是编译时必须的。port目录是各种板子的移植代码,可以作为参考。其他目录不是必须的。

移植的难点

MicroPython的核心代码是符合C99规范的,所以使用OpenHarmony的编译器编译并没有啥语法问题。移植的难点主要是把makefile改写为.gn文件。因为在MicroPython的makefile中有几个脚本,它们会扫描源代码,把其中的字符串标识符定义提取出来形成一个QSTR表,而程序之中只用一些定义的常量代替,这样的好处是可以节省存储空间,比较适合嵌入式应用。有关详细的原理可以参考《micropython源码分析之qstr》。这些生成的头文件都存放在build/genhdr/目录中。在OpenHarmony所使用的GN系统中没有类似的机制。

在唐佐林的方案中是先按照OpenHarmony的工具链配置MicroPython的makefile,然后在Linux下生成.lib库文件,再将库文件拷贝到OpenHarmony中,作为第三方库文件使用。不过这个方案不太符合我们上一篇博文提到的“采用比较规范的OpenHarmony的开发流程”。

我们目前的临时方案是在Linux下先运行ports/minimal目录下的makefile,然后把生成的build/genhdr/目录的头文件拷贝到OpenHarmony工程中。这些头文件的生成和所使用的编译器其实没有关系,只和mpconfigport.h文件的设置有关。所以只要保证OpenHarmony工程中的mpconfigport.h文件和Linux下的mpconfigport.h文件一致就可以了。我们未来的目标是通过改写Python脚本把MicroPython的生成头文件功能彻底移植到GN系统中、