本文主要介绍一下,在Linux环境下编译micropython固件的方法和流程。
首先,我们先来看一下MicroPython的源码结构。
github地址:https://github.com/micropython/micropython
你会发现,micropython根据不同的MCU运行平台进行了分类,比如esp8266目录下就是esp8266-WIFI模块上的micropython的源码,stmhal是运行在stm32上的,还有cc3200等。
|
py/ |
Python实现的核心部分,包括编译器、运行时、核心库 |
|
mpy-cross/ |
MicroPython 自带的交叉编译器,可以将python脚本编译为mpy加密文件 |
|
unix/ |
在UNIX上运行的MicroPython |
|
stmhal/ |
在TPYBoard和类似的STM32开发板上运行的MicroPython |
|
minimal/ |
MicroPthon的最小集,用于移植到其他微处理器 |
|
tests/ |
测试框架和测试脚本 |
|
docs/ |
MicroPython官方的reStructuredText文档资料。地址:http://docs.micropython.org |
|
bare-arm/ |
在ARM上MicroPython的最小版本 |
|
teensy/ |
在Teensy 3.1上运行的MicroPython |
|
pic16bit/ |
在16 位 PIC 微控制器上运行的MicroPython |
|
esp8266/ |
在ESP8266 WIFI模块上运行的MicroPython |
|
extmod/ |
C 实现的模块 |
|
tools/ |
各种工具 |
|
examples/ |
Python脚本实例 |
|
READ.md |
说明文档 |
开始编译固件
本人的系统环境:ubuntu15.0464位系统
Ubuntu官网:http://cn.ubuntu.com/?_ga=2.264511627.56850772.1502953593-1795108721.1502953593
1、安装arm-none-eabi-gcc交叉编译工具和gcc编译器
打开终端执行命令
|
1 2 3 |
|
2、下载micropython的源码包
我放在了/opt目录下
|
1 |
|
等待git完毕,进入stmhal/boards/目录下,里面又根据不同型号的芯片进行了分类。
3、开始编译
切换到stmhal目录
|
1 |
|
执行编译命令,等待编译完成。
|
1 |
|
BOARD参数为stmhal/boards/目录下相应的开发板名称。
本次教程用的是TPYBoardv102(蓝色)开发板,兼容PYBV10,所以选择PYBV10开发板继续编译。
若是TPYBoardv102(绿色)基础板,同样选择PYBV10。
若是TPYBoardv102(黑色)开发板,需选择PYBV11。
编译成功。生成的固件文件stmhal/build-PYBV10/firmware.dfu和firmware.hex。
4、烧写固件
请参考教程:http://tpyboard.com/support/reference11/302.html
增加自定义类库
使用过micropython的小伙伴都知道,里面有一个重要的模块pyb。下面我们就尝试在micropython源码中新建一个名为tpyboard的pyb子类,里面添加一个简单的函数display,输出一句”HelloTPYBoard”。
5、首先大体来看一下stmhal目录下的各种.c和.h文件。基本上根据他们的名称就能判断出功能来。
6、先来参考一下led.c文件,了解一下大体的流程。
找到了led_obj_on函数,这就是我们平时用的pyb.LED(1).on()
|
1 2 3 4 5 6 |
|
声明注册一下on函数,MP_DEFINE_CONST_FUN_OBJ_1最后的数字跟参数的数量相对应。
|
1 |
|
再往下可以看到led_locals_dict_table,将上面声明的函数添加到led模块函数字典中。
|
1 2 3 4 5 6 7 |
|
建立micropython对象,遵循以下原则。
|
1 2 3 4 5 6 7 |
|
7、接下来我们在stmhal目录下新建一个tpyboard.c文件,内容如下:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
8、新建tpyboard.h文件,内容如下:
|
1 |
|
找到modpyb.c文件,将tpybaord子模块添加到pyb的pyb_module_globals_table[]子类表中。
|
1 |
|
记得在modpyb.c中添加tpyboard.h的引用。
|
1 |
|
9、添加完毕后,将tpyboard.c文件添加到Makefile文件中,进行编译。我就直接放到了led.c\下面。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
|
10、执行命令开始编译,编译通过,重新将编译好的固件烧写到TPYBoard开发板上。
11、烧写完毕后,用putty连接TPYBoardv102,输入以下内容:
|
1 |
|