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

获取Micropython源码

Linux环境下获取Micropython源码非常简单,使用git clone:

git clone https://github.com/micropython/micropython.git

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

到 官网 下载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-crossmake编译完成生成命令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,此时将运行新的固件。

micropython固件源码_Micropython加速物联网开发7 - Micropython源码编译与固件更新相关推荐

  1. micropython图形化编程基于esp8266_esp8266物联网开发一:MicroPython初战江湖

    用esp8266做的物联网开发,涉及到固件烧写,固件擦除,代码编写等方面,做一一记录. 1. 固件烧写 打开固件烧写工具,点击"esp8266 download tools",在打 ...

  2. 直播一对一视频交友源码,一对一直播开发直播间源码剖析

    一对一视频交友源码具有扁平化的系统功能,配合自主研发的直播间技术,完善的高并发数据处理解决方案,可搭建部署独立的一对一直播开发后的平台稳定运营. 下面看一下直播间部分代码处理方案 直播间部分 priv ...

  3. 550.00 php_16年最新大麦户源码PHP原创自己开发 返800源码绝对运营版shua2016

    普通版: 500 包更新: 1000 源码完全自己开发的,绝对无后门,放心使用,代码只是加了个授权码,自己使用和二次开发都不影响,不能转手卖给其他人,这个代码之前已经运营一年,代码无漏洞,购买后,保证 ...

  4. php 2016 大麦户源码,16年最新大麦户源码PHP原创自己开发 返800源码绝对运营版shua2016...

    普通版: 500 包更新: 1000 源码完全自己开发的,绝对无后门,放心使用,代码只是加了个授权码,自己使用和二次开发都不影响,不能转手卖给其他人,这个代码之前已经运营一年,代码无漏洞,购买后,保证 ...

  5. NB-IoT物联网开发技巧和应用:专栏总述

    目录 1.基础篇 2.进阶篇 3.实战篇 4.拓展篇 5.项目演示效果 ​本专栏系统地介绍NB-IoT关键技术.网络体系与应用架构.应用系统组件以及终端硬件设计的基础上,给出了一个NB-IoT系统设计 ...

  6. ANDROID物联网开发从入门到实战附源码

    本书从获取源码和搭建应用开发环境开始讲起,依次讲解了基础知识篇.数据传输篇.信息识别篇.传感器应用篇和技术提高篇这 5大部分内容. 目录 第1篇 基础知识篇 第1章 Android系统介绍 2 1.1 ...

  7. 课程分享:鸿蒙HarmonyOS系统及物联网开发实战课程(附课程视频及源码下载)

    课程名称: 鸿蒙HarmonyOS系统及物联网开发实战课程 课程介绍: HarmonyOS 是一款面向万物互联时代的.全新的分布式操作系统.在传统的单设备系统能力基础上,HarmonyOS 提出了基于 ...

  8. 基于SpringBoot开发的物联网风电监测系统源码【源码分享】

    SpringBoot物联网风电监测系统源码   iot物联网风电能源电场监控系统源码  源码免费分享,需要源码学习,请先关注然后私信我获取下载地址. 基于SpringBoot的物联网系统 易读易懂.界 ...

  9. 物联网开发笔记(31)- 使用Micropython开发ESP32开发板之手机扫二维码远程控制开关灯(1)

    一.目的 我们分3节讲述远程控制.这一节在我们的240x240的oled屏幕上显示二维码,然后用手机扫二维码,从开发板的TCP服务器上返回字符串. 二.环境 ESP32 + 240x240的oled彩 ...

最新文章

  1. 浅析综合布线系统中检测双绞线的几种方式
  2. android apk反编译工具下载,Android apk反编译工具下载与使用
  3. C#进阶系列——WebApi 异常处理解决方案
  4. iOS如何退出测试软件,如何继续测试iOS应用程序,使用UIAutomation仪器,甚至应用程序退出后?(How to c...
  5. offset-list 和 prefix-list简介
  6. OpenGL加载纹理glGenTextures——内存优化(OpenGL内存泄漏)
  7. c语言二维数组每行最小值,编写一个函数,用于计算具有n行和m列的二维数组中指定列的平均值以及数组各行的和的最小值。...
  8. Affine层/Softmax层的实现
  9. Java并发之Condition接口
  10. html怎么用pdf保存,html保存为PDF
  11. c语言字符型常量的例题,C语言笔试题100道
  12. Vue引入百度地图API,添加点击地图拾取坐标并且标记和地址搜索功能
  13. html怎么统计总访问量,如何实现对网站页面访问量的统计?
  14. Unity Shader零基础入门4:纹理贴图与法线贴图
  15. 2.5css ps切图、
  16. 多多参谋:拼多多推广怎么出价?该怎么做好推广?
  17. 初学SLAM二之BA当中的数学知识点
  18. 兔子繁衍问题—c语言
  19. Java课程设计-基于Java Swing的学生信息管理系统-版本二
  20. 常见的医学图像成像(总)

热门文章

  1. 如何实现一次编码,到处运行?新一代云端一体化探索
  2. 技术架构演进|0到千万DAU,微淘如何走过?
  3. TableStore:爬虫数据存储和查询利器
  4. 支付宝工程师创造出了一个可以“拷贝”支付宝的神器
  5. 阿里平头哥发布自研云芯片倚天710,性能超越业界标杆20%
  6. 开放,从容不凡,携手迈进容器应用时代 ——2020容器云职业技能大赛正式开赛
  7. 不小心执行 rm -f,该如何恢复?
  8. 从核心技术到高可用实践——解密数据库深度挖掘指南
  9. 01let和const
  10. 构造函数、实例、原型对象、继承