MicroPython核心(1):源码获取、编译构建
本文介绍了MicroPython在主要平台进行构建的基本方法,包括如何进行版本控制、获取和构建移植的源代码、构建文档、运行测试,以及MicroPython代码库的目录结构。
使用git进行源码管理
MicroPython托管在GitHub上,并使用Git进行源码管理。在进行下面的步骤之前,需要在本机先安装好Git。
注意:
- 有关安装说明的参考资料,请参阅Git安装说明,建议先熟悉Git的基本概念和操作再开始下面的工作。
.git-blame-ignore-revs文件,可避免git blame的输出被只用于格式化代码而无功能改动的提交所干扰。如何使用请参见 git blame文档 文档。
获取代码
建议维护一个MicroPython代码库的分支以备开发之用。获取源代码的过程如下:
- fork仓库https://github.com/micropython/micropython
- 获得一个<https://github.com//micropython>分支
- 使用以下命令克隆分支仓库:
$ git clone https://github.com/<your-user-name>/micropython
然后,配置远程仓库,以便能够在MicroPython项目上进行协作。
配置远程upstream:
$ cd micropython
$ git remote add upstream https://github.com/micropython/micropython
为方便共享代码变更,在分支版本库中配置 upstream 和 origin,也可以维护自己的映射,但建议 origin 映射到分支版本,而upstream映射到MicroPython主版本库。
完成上述配置后,应该与下面类似:
$ git remote -v
origin https://github.com/<your-user-name>/micropython (fetch)
origin https://github.com/<your-user-name>/micropython (push)
upstream https://github.com/micropython/micropython (fetch)
upstream https://github.com/micropython/micropython (push)
现在已经有一份源代码副本了。默认情况下,它指向的是主分支。为了做好进一步开发的准备,建议在开发分支上工作。
$ git checkout -b dev-branch
这里可以给它起任何名字,每当切换到不同的分支时,都必须编译MicroPython。
编译构建代码
编译MicroPython时,需要编译相应的移植,通常是针对特定的开发板。先安装所需的依赖项,然后构建 MicroPython 交叉编译器,这样才能成功编译和构建。这适用于使用Linux进行编译的情况。Windows说明将在后文提供。
获取依赖项
安装Linux依赖项:
$ sudo apt-get install build-essential libffi-dev git pkg-config
对于stm32的移植,需要ARM交叉编译器:
$ sudo apt-get install gcc-arm-none-eabi libnewlib-arm-none-eabi
Python是必须的,虽然支持Python 2,但建议使用Python 3。检查系统中是否有可用的 Python:
$ python3
Python 3.5.0 (default, Jul 17 2020, 14:04:10)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
所有支持的移植都有不同的依赖性要求,请参见各自的 readme 文件。
构建 MicroPython 交叉编译器
几乎所有移植都需要先编译 mpy-cross,以便对将包含在 port 固件中的 Python 代码进行预编译:
$ cd mpy-cross
$ make
**注意:**mpy-cross 必须针对主机架构而非目标架构构建。
如果构建成功,应该会看到类似下面的信息:
LINK mpy-crosstext data bss dec hex filename279328 776 880 280984 44998 mpy-cross
**注意:**使用 make -C mpy-cross 在一条语句中编译交叉编译器,而无需移动到 mpy-cross 目录,否则,接下来的步骤将需要执行 cd ... 操作。
MicroPython Unix移植构建
Unix移植是可在 Linux、macOS 和其他类 Unix 操作系统上运行的 MicroPython 版本。它对于开发 MicroPython 非常有用,因为它避免了将代码部署到设备上进行测试的麻烦。在许多方面,它的工作原理与 CPython 的 python 二进制文件非常相似。
要对 Unix 移植构建,需要先安装所有与 Linux 相关的依赖项,详见所需依赖项 。要确保已为该移植安装了所有依赖项。此外,还要确保 gcc 和 GNU make 环境能正常运行。下面的示例使用的是 Ubuntu 20.04,但其他 Linux 也可以使用,只需稍作修改即可:
$ gcc --version
gcc (Ubuntu 9.3.0-10ubuntu2) 9.3.0
Copyright (C) 2019 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.then build:
$ cd ports/unix
$ make submodules
$ make
如果MicroPython能被正确构建,应该可以看到下面的信息:
LINK micropythontext data bss dec hex filename412033 5680 2496 420209 66971 micropython
现在运行:
$ ./micropython
MicroPython v1.13-38-gc67012d-dirty on 2020-09-13; linux version
Use Ctrl-D to exit, Ctrl-E for paste mode
>>> print("hello world")
hello world
>>>
Windows移植构建
Windows 移植包括一个 Visual Studio 项目文件 micropython.vcxproj,可以用它来构建 micropython.exe。该文件可以在 Visual Studio 中打开,也可以使用 msbuild 从命令行编译。另外,也可以使用 mingw 在 Windows 和 Cygwin 或 Linux 中构建。
STM32移植构建
与 Unix 移植版一样,需要安装一些所需的依赖项,然后进行编译:
$ cd ports/stm32
$ make submodules
$ make
有关固件刷新的更多详情,请参阅stm32文档。
**注意:**请参阅 “所需的依赖项”,以确保为该移植安装了所有依赖项。arm-none-eabi-gcc也应位于 $PATH 中, 或通过设置环境变量或在 make 命令行参数中手动通过 CROSS_COMPILE 指定。
还可以指定开发板:
$ cd ports/stm32
$ make BOARD=<board> submodules
$ make BOARD=<board>
关于可用的可用板,可以参考ports/stm32/boards,例如 “PYBV11"或"NUCLEO_WB55”。
文档构建
MicroPython 文档使用 Sphinx 创建。如果已经安装了 Python,则使用 pip 安装 Sphinx。建议使用虚拟环境:
$ python3 -m venv env
$ source env/bin/activate
$ pip install -r docs/requirements.txt
进入docs目录
$ cd docs
构建文档:
$ make html
在浏览器中打开 docs/build/html/index.html,查看本地文档。请参阅有关导入文档的文档,以使用 “阅读文档”。
运行测试
在Linux移植上运行测试套件中的所有测试:
$ cd ports/unix
$ make test
在通过USB连接的开发板或设备上运行一系列测试:
$ cd tests
$ ./run-tests.py --target minimal --device /dev/ttyACM0
目录结构
在某些实施细节方面,有几个目录值得注意。以下是源代码顶级文件夹的细分。
| 目录 | 说明 |
|---|---|
| py | 包含编译器、运行时和核心库的实现 |
| mpy-cross | MicroPython交叉编译器,可将Python脚本预编译为字节码 |
| ports | 支持移植的所有 MicroPython 版本的代码 |
| lib | 任何移植使用的低级 C 语言库,其中大部分是第三方库 |
| drivers | 具有针对特定硬件的驱动程序,旨在支持多种移植 |
| extmod | 包含更多非核心模块的 C 语言实现 |
| docs | 网站上的标准文档https://docs.micropython.org/ |
| tests | 测试套件的实现 |
| tools | 包含构建和 CI 流程使用的脚本,以及pyboard.py和mpremote等工具 |
| examples | 把MicroPython作为库和本地模块构建的示例代码 |
相关文章:
MicroPython核心(1):源码获取、编译构建
本文介绍了MicroPython在主要平台进行构建的基本方法,包括如何进行版本控制、获取和构建移植的源代码、构建文档、运行测试,以及MicroPython代码库的目录结构。 使用git进行源码管理 MicroPython托管在GitHub上,并使用Git进行源码管理。在进…...
pyspark之Structured Streaming file文件案例1
# generate_file.py # 生成数据 生成500个文件,每个文件1000条数据 # 生成数据格式:eventtime name province action ()时间 用户名 省份 动作) import os import time import shutil import time FIRST_NAME [Zhao, Qian, Sun, Li, Zhou, Wu, Zheng, Wang] SEC…...
虚幻UE 特效-Niagara特效实战-雨天
回顾Niagara特效基础知识:虚幻UE 特效-Niagara特效初识 其他两篇实战:虚幻UE 特效-Niagara特效实战-火焰、烛火、虚幻UE 特效-Niagara特效实战-烟雾、喷泉 本篇笔记我们再来实战雨天,雨天主要用到了特效中的事件。 文章目录 一、雨天1、创建雨…...
k8s 集群搭建的一些坑
k8s集群部署的时候会遇到很多的坑,即使看网上的文档也可能遇到各种的坑。 安装准备 1、虚拟机两台(ip按自己的网络环境相应配置)(master/node) 192.168.100.215 k8s-master 192.168.100.216 k8s-node1 2、关闭防火墙(master/node) system…...
SpringMVC传递数据给前台
SpringMVC有三种方式将数据提供给前台 第一种 使用Request域 第二种 使用Model(数据默认是存放在Request域中) 与第一种方式其实是一致的 第三种 使用Map集合(数据默认是存放在Request域中)...
国标GB28181安防视频监控EasyCVR级联后上级平台视频加载慢的原因排查
国标GB28181协议安防视频监控系统EasyCVR视频综合管理平台,采用了开放式的网络结构,可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力,同时还…...
React16源码: React中的HostComponent HostText的源码实现
HostComponent & HostText 1 )概述 HostComponent 就是我们dom原生的这些节点, 如: div, span, p 标签这种 使用的是小写字母开头的这些节点一般都认为它是一个 HostComponent HostText,它是单纯的文本节点主要关注它们的一个更新过程 2 …...
Unity3D代码混淆方案详解
背景 Unity引擎使用Mono运行时,而C#语言易受反编译影响,存在代码泄露风险。本文通过《QQ乐团》项目实践,提出一种适用于Unity引擎的代码混淆方案,以保护代码逻辑。 引言 在Unity引擎下,为了防止代码被轻易反编译&a…...
安科瑞应急疏散照明系统在歌舞娱乐等场所的应用
首先必须明确疏散照明并不包含疏散指示标志,疏散照明是为了提供人员疏散时的必要照明,必须达到规定照度,以便逃生时看清逃生的路径,避免出现恐慌及踩踏事故,而疏散指示标志则是提供疏散路径方向引导的,所以…...
Go语言协程使用
主协程执行打印,子协程不打印 package main import ("fmt" )func do(i int) {fmt.Println("执行中") } func main() {fmt.Println("main协程")go do(1)fmt.Println("执行完了") }//main协程 //执行完了子协程没有打印输出…...
JAVA如何创建对象
在 Java 中创建对象的步骤如下: 定义一个类:在 Java 中,所有的对象都是通过类来创建的。因此,首先需要定义一个类,即描述对象的属性和行为。 声明变量:要创建一个对象,需要先声明一个变量来保存…...
《WebKit 技术内幕》之五(2): HTML解释器和DOM 模型
2.HTML 解释器 2.1 解释过程 HTML 解释器的工作就是将网络或者本地磁盘获取的 HTML 网页和资源从字节流解释成 DOM 树结构。 这一过程中,WebKit 内部对网页内容在各个阶段的结构表示。 WebKit 中这一过程如下:首先是字节流,经过解码之…...
Spring Boot多环境配置
Spring Boot的针对不同的环境创建不同的配置文件, 语法结构:application-{profile}.properties profile:代表的就是一套环境 需求 application-dev.yml 开发环境 端口8090 application-test.yml 测试环境 端口8091 application-prod.yml 生产环境 端口80…...
常用的目标跟踪有哪些
目标跟踪是计算机视觉领域的一个重要研究方向,主要用于实现视频监控、人机交互、智能交通等领域。下面介绍几种常用的目标跟踪方法: 特征匹配法 特征匹配法是目标跟踪中最基本的方法之一,其基本原理是通过提取目标的特征,然后在…...
python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-帖子详情页实现
锋哥原创的SpringbootLayui python222网站实战: python222网站实战课程视频教程(SpringBootPython爬虫实战) ( 火爆连载更新中... )_哔哩哔哩_bilibilipython222网站实战课程视频教程(SpringBootPython爬虫实战) ( 火…...
11、Kafka ------ Kafka 核心API 及 生产者API 讲解
目录 Kafka核心API 及 生产者API讲解★ Kafka的核心APIKafka包含如下5类核心API: ★ 生产者APIKafka 的API 文档 ★ 使用生产者API发送消息 Kafka核心API 及 生产者API讲解 官方文档 ★ Kafka的核心API Kafka包含如下5类核心API: Producer API&#x…...
MySQL 8.3 发布, 它带来哪些新变化?
1月16号 MySQL 官方发布 8.3 创新版 和 8.0.36 长期支持版本 (该版本 没有新增功能,更多是修复bug ),本文基于 官方文档 说一下 8.3 版本带来的变化。 一 增加的特性 1.1 GTID_NEXT 支持增加 TAG 选项。 之前的版本中 GTID_NEXTUUID:number ÿ…...
【数据结构】详谈队列的顺序存储及C语言实现
循环队列及其基本操作的C语言实现 前言一、队列的顺序存储1.1 队尾指针与队头指针1.2 基本操作实现的底层逻辑1.2.1 队列的创建与销毁1.2.2 队列的增加与删除1.2.3 队列的判空与判满1.2.4 逻辑的局限性 二、循环队列2.1 循环队列的实现逻辑一2.2 循环队列的实现逻辑二2.3 循环队…...
为什么 HTTPS 协议能保障数据传输的安全性?
HTTP 协议 在谈论 HTTPS 协议之前,先来回顾一下 HTTP 协议的概念。 HTTP 协议介绍 HTTP 协议是一种基于文本的传输协议,它位于 OSI 网络模型中的应用层。 HTTP 协议是通过客户端和服务器的请求应答来进行通讯,目前协议由之前的 RFC 2616 拆…...
使用 Node 创建 Web 服务器
Node.js 提供了 http 模块,http 模块主要用于搭建 HTTP 服务端和客户端,使用 HTTP 服务器或客户端功能必须调用 http 模块,代码如下: var http require(http); 以下是演示一个最基本的 HTTP 服务器架构(使用 8080 端口)&#x…...
Linux ISP驱动全流程解析:从V4L2框架到图像处理管线
1. 项目概述:从用户按下快门到ISP驱动当我们用手机或相机拍照时,屏幕上那个“咔嚓”的动画和瞬间生成的图片,背后是一场从物理世界到数字世界的精密“接力赛”。这场接力赛的第一棒是镜头和传感器,它们负责捕捉光线。但传感器输出…...
保姆级教程:用Python+OpenCV高效切割Potsdam语义分割数据集(附完整代码)
PythonOpenCV实战:Potsdam语义分割数据集高效切割全流程解析 第一次接触Potsdam数据集时,面对那些6000x6000像素的巨幅航拍图像,我的GPU在训练时直接报显存不足的错误。这让我意识到,高分辨率图像的切割预处理不是可选项…...
别再滥用Promise.all了!聊聊Vue/React项目中用p-limit控制并发请求的实战心得
别再滥用Promise.all了!聊聊Vue/React项目中用p-limit控制并发请求的实战心得 在Vue/React项目中处理批量数据请求时,许多开发者会条件反射地使用Promise.all,认为这是最高效的方案。直到某次线上事故——用户尝试导出500条订单数据时浏览器直…...
实战指南:用Python ESL(greenswitch库)监听FreeSWITCH事件并自动录音
实战指南:用Python ESL(greenswitch库)监听FreeSWITCH事件并自动录音 在通信系统开发中,FreeSWITCH作为强大的开源软交换平台,其Event Socket接口为开发者提供了深度集成的可能。本文将聚焦如何利用Python生态中的gre…...
MaterialSkin 2.0终极指南:3步解锁现代化WinForms界面设计
MaterialSkin 2.0终极指南:3步解锁现代化WinForms界面设计 【免费下载链接】MaterialSkin Theming .NET WinForms, C# or VB.Net, to Googles Material Design Principles. 项目地址: https://gitcode.com/gh_mirrors/mat/MaterialSkin 还在为传统WinForms应…...
Escrcpy终极指南:5分钟掌握Android设备图形化控制与屏幕镜像
Escrcpy终极指南:5分钟掌握Android设备图形化控制与屏幕镜像 【免费下载链接】escrcpy 📱 Display and control your Android device graphically with scrcpy. 项目地址: https://gitcode.com/GitHub_Trending/es/escrcpy 你是否曾经为在电脑上控…...
端侧AI算力瓶颈与优化企业格局解析
一、引言:端侧AI的发展困境与研究核心1.1 端侧AI的产业价值与普及现状端侧AI作为边缘计算的核心落地形态,正深度渗透工业制造、智能终端、车载电子、安防监控等领域。据IDC数据,2025年全球端侧AI芯片市场规模突破180亿美元,工业端…...
【SRC漏洞挖掘系列】第04期:文件上传与解析——把图片变成“特洛伊木马”
上期回顾:我们刚用 SQL 注入把数据库翻了个底朝天。本期我们来聊聊更暴力的漏洞——文件上传。如果说 SQL 注入是“偷”,那文件上传就是直接往人家服务器里安炸弹。💣一、为什么文件上传是“高危”?在 SRC 评级里,GetS…...
2026年写作类国际竞赛测评:从技术视角分析高含金量赛事与留学背景提升策略
导读:本文基于 2026 年最新赛事数据,从学术认可度、升学加成、参赛门槛、时间成本、获奖概率五个技术维度,对全球主流写作类国际竞赛进行量化测评。通过构建多维度评分模型,为留学申请者提供科学的竞赛选择与背景提升方案。 目录 …...
C语言编程实战:ASCII码表的深度解析与应用
1. ASCII码表:程序员的字符密码本 第一次接触ASCII码表时,我盯着那张密密麻麻的数字字符对照表发呆了半小时。直到在调试程序时发现字母A居然能用数字65代替,才突然意识到:这简直就是程序员世界的摩斯密码。ASCII(Amer…...
