您的位置:首页 > 编程语言 > Python开发

Micropython加速物联网开发7 - Micropython源码编译与固件更新

2017-05-24 16:37 756 查看
在实际开发中,难免会遇到编译Micropython源码的情况:比如当前固件损坏、固件版本升级、需要裁剪固件节省空间等。本文介绍在Linux环境中编译Micropython源码并下载到TPYBoard运行的流程。

获取Micropython源码

Linux环境下获取Micropython源码非常简单,使用git clone:
git clone https://github.com/micropython/micropython.git

安装arm-none-eabi交叉编译器

到  href="https://launchpad.net/gcc-arm-embedded/+download" target=_blank>官网
 下载arm-none-eabi安装包,我使用的是gcc-arm-none-eabi-5_4-2016q3-20160926-linux.tar.bz2。
解压:tar jxvf gcc-arm-none-eabi-5_4-2016q3-20160926-linux.tar.bz2
解压后生成目录gcc-arm-none-eabi-5_4-2016q3,编译器指令在bin目录中。
将交叉编译器加入环境变量:
在/etc/profile文件末尾添加 export PATH=/opt/mpy_compiler/gcc-arm-none-eabi-5_4-2016q3/bin:$PATH
执行source /etc/profile
输入arm-none-eabi-gcc -v验证编译器安装、设置结果,能够成功返回编译器信息则表示安装成功。

X86 Linux GCC版本约定

我使用的centos默认gcc版本为4.4.7,在编译mpy-cross过程中报错:py/objdict.c:473: error: dereferencing pointer ‘o’ does break strict-aliasing rules,原因是编译器版本太低,因此将gcc编译器升级到4.8。升级步骤如下:
wget http://people.centos.org/tru/devtools-2/devtools-2.repo mv devtools-2.repo /etc/yum.repos.d
yum install devtoolset-2-gcc devtoolset-2-binutils devtoolset-2-gcc-c++
安装之后编译器指令路径为:/opt/rh/devtoolset-2/root/usr/bin备份旧版本,为编译器建立新的软链接:
mv /usr/bin/gcc /usr/bin/gcc-4.4.7
mv /usr/bin/g++ /usr/bin/g++-4.4.7
mv /usr/bin/c++ /usr/bin/c++-4.4.7
ln -s /opt/rh/devtoolset-2/root/usr/bin/gcc /usr/bin/gcc
ln -s /opt/rh/devtoolset-2/root/usr/bin/c++ /usr/bin/c++
ln -s /opt/rh/devtoolset-2/root/usr/bin/g++ /usr/bin/g++
查看gcc版本:
[root@donkey bin]# gcc --version
gcc (GCC) 4.8.2 20140120 (Red Hat 4.8.2-15)
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

编译mpy-cross

mpy-cross是Micropython自身的交叉编译器,编译固件之前需要先编译mpy-cross。
cd mpy-cross
make
编译完成生成命令mpy-cross:
CC main.c
CC gccollect.c
LINK mpy-cross
text    data     bss     dec     hex filename
133582     784     872  135238   21046 mpy-cross

编译stmhal

stmhal为Micropython针对STM32的实现,因此编译该目录的代码生成固件。
目前Micropython支持STM32的多种型号,这些型号的定义在目录/stmhal/boards中,需要在Makefile中修改型号。
本例中Makefile定义如下:
BOARD ?= PYBV10进入stmhal目录进行编译:
cd stmhal
make
LINK build-PYBV10/firmware.elf
text    data     bss     dec     hex filename
321020     352   28088  349460   55514 build-PYBV10/firmware.elf
Create build-PYBV10/firmware.dfu
Create build-PYBV10/firmware.hex
编译后生成.dfu和.hex固件:
[root@donkey build-PYBV10]# pwd
/opt/micropython/stmhal/build-PYBV10
[root@donkey build-PYBV10]# ls firmware*
firmware0.bin  firmware1.bin  firmware.dfu  firmware.elf  firmware.hex  firmware.map
[root@donkey build-PYBV10]# du -h firmware.dfu
316K    firmware.dfu

下载固件

下载方式有SWD ST-Link和DFU两种,前者依赖ST-Link硬件,因此建议通过USB使用DFU模式烧写固件,该方法非常简便。安装DfuSedemo工具,运行。
将TPYBoard开发板的BOOT0和3.3V引脚短接,BOOT0引脚即DFU。



按下RST键,释放RST键。
断开BOOT0和3.3V。
此时DfuSedemo工具左上角的"Available DFU and compatible HID Devices"会识别到开发板。
点击"Choose..." 选择编译好的.dfu文件,点击"Upgrade"进行固件烧写。



提示"Upgrade successful!"则固件烧写成功,重启TPYBoard,此时将运行新的固件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: