当前位置: 首页 > news >正文

MicroPython核心(1):源码获取、编译构建

本文介绍了MicroPython在主要平台进行构建的基本方法,包括如何进行版本控制、获取和构建移植的源代码、构建文档、运行测试,以及MicroPython代码库的目录结构。

使用git进行源码管理

MicroPython托管在GitHub上,并使用Git进行源码管理。在进行下面的步骤之前,需要在本机先安装好Git。

注意:

  • 有关安装说明的参考资料,请参阅Git安装说明,建议先熟悉Git的基本概念和操作再开始下面的工作。
  • .git-blame-ignore-revs文件,可避免git blame的输出被只用于格式化代码而无功能改动的提交所干扰。如何使用请参见 git blame文档 文档。

获取代码

建议维护一个MicroPython代码库的分支以备开发之用。获取源代码的过程如下:

  1. fork仓库https://github.com/micropython/micropython
  2. 获得一个<https://github.com//micropython>分支
  3. 使用以下命令克隆分支仓库:
$ git clone https://github.com/<your-user-name>/micropython

然后,配置远程仓库,以便能够在MicroPython项目上进行协作。

配置远程upstream:

$ cd micropython
$ git remote add upstream https://github.com/micropython/micropython

为方便共享代码变更,在分支版本库中配置 upstreamorigin,也可以维护自己的映射,但建议 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 相关的依赖项,详见所需依赖项 。要确保已为该移植安装了所有依赖项。此外,还要确保 gccGNU 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-crossMicroPython交叉编译器,可将Python脚本预编译为字节码
ports支持移植的所有 MicroPython 版本的代码
lib任何移植使用的低级 C 语言库,其中大部分是第三方库
drivers具有针对特定硬件的驱动程序,旨在支持多种移植
extmod包含更多非核心模块的 C 语言实现
docs网站上的标准文档https://docs.micropython.org/
tests测试套件的实现
tools包含构建和 CI 流程使用的脚本,以及pyboard.py和mpremote等工具
examples把MicroPython作为库和本地模块构建的示例代码

相关文章:

MicroPython核心(1):源码获取、编译构建

本文介绍了MicroPython在主要平台进行构建的基本方法&#xff0c;包括如何进行版本控制、获取和构建移植的源代码、构建文档、运行测试&#xff0c;以及MicroPython代码库的目录结构。 使用git进行源码管理 MicroPython托管在GitHub上&#xff0c;并使用Git进行源码管理。在进…...

pyspark之Structured Streaming file文件案例1

# generate_file.py # 生成数据 生成500个文件,每个文件1000条数据 # 生成数据格式&#xff1a;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特效基础知识&#xff1a;虚幻UE 特效-Niagara特效初识 其他两篇实战&#xff1a;虚幻UE 特效-Niagara特效实战-火焰、烛火、虚幻UE 特效-Niagara特效实战-烟雾、喷泉 本篇笔记我们再来实战雨天&#xff0c;雨天主要用到了特效中的事件。 文章目录 一、雨天1、创建雨…...

k8s 集群搭建的一些坑

k8s集群部署的时候会遇到很多的坑&#xff0c;即使看网上的文档也可能遇到各种的坑。 安装准备 1、虚拟机两台&#xff08;ip按自己的网络环境相应配置&#xff09;(master/node) 192.168.100.215 k8s-master 192.168.100.216 k8s-node1 2、关闭防火墙(master/node) system…...

SpringMVC传递数据给前台

SpringMVC有三种方式将数据提供给前台 第一种 使用Request域 第二种 使用Model&#xff08;数据默认是存放在Request域中&#xff09; 与第一种方式其实是一致的 第三种 使用Map集合&#xff08;数据默认是存放在Request域中&#xff09;...

国标GB28181安防视频监控EasyCVR级联后上级平台视频加载慢的原因排查

国标GB28181协议安防视频监控系统EasyCVR视频综合管理平台&#xff0c;采用了开放式的网络结构&#xff0c;可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力&#xff0c;同时还…...

React16源码: React中的HostComponent HostText的源码实现

HostComponent & HostText 1 &#xff09;概述 HostComponent 就是我们dom原生的这些节点, 如: div, span, p 标签这种 使用的是小写字母开头的这些节点一般都认为它是一个 HostComponent HostText&#xff0c;它是单纯的文本节点主要关注它们的一个更新过程 2 &#xf…...

Unity3D代码混淆方案详解

背景 Unity引擎使用Mono运行时&#xff0c;而C#语言易受反编译影响&#xff0c;存在代码泄露风险。本文通过《QQ乐团》项目实践&#xff0c;提出一种适用于Unity引擎的代码混淆方案&#xff0c;以保护代码逻辑。 引言 在Unity引擎下&#xff0c;为了防止代码被轻易反编译&a…...

安科瑞应急疏散照明系统在歌舞娱乐等场所的应用

首先必须明确疏散照明并不包含疏散指示标志&#xff0c;疏散照明是为了提供人员疏散时的必要照明&#xff0c;必须达到规定照度&#xff0c;以便逃生时看清逃生的路径&#xff0c;避免出现恐慌及踩踏事故&#xff0c;而疏散指示标志则是提供疏散路径方向引导的&#xff0c;所以…...

Go语言协程使用

主协程执行打印&#xff0c;子协程不打印 package main import ("fmt" )func do(i int) {fmt.Println("执行中") } func main() {fmt.Println("main协程")go do(1)fmt.Println("执行完了") }//main协程 //执行完了子协程没有打印输出…...

JAVA如何创建对象

在 Java 中创建对象的步骤如下&#xff1a; 定义一个类&#xff1a;在 Java 中&#xff0c;所有的对象都是通过类来创建的。因此&#xff0c;首先需要定义一个类&#xff0c;即描述对象的属性和行为。 声明变量&#xff1a;要创建一个对象&#xff0c;需要先声明一个变量来保存…...

《WebKit 技术内幕》之五(2): HTML解释器和DOM 模型

2.HTML 解释器 2.1 解释过程 HTML 解释器的工作就是将网络或者本地磁盘获取的 HTML 网页和资源从字节流解释成 DOM 树结构。 这一过程中&#xff0c;WebKit 内部对网页内容在各个阶段的结构表示。 WebKit 中这一过程如下&#xff1a;首先是字节流&#xff0c;经过解码之…...

Spring Boot多环境配置

Spring Boot的针对不同的环境创建不同的配置文件&#xff0c; 语法结构&#xff1a;application-{profile}.properties profile:代表的就是一套环境 需求 application-dev.yml 开发环境 端口8090 application-test.yml 测试环境 端口8091 application-prod.yml 生产环境 端口80…...

常用的目标跟踪有哪些

目标跟踪是计算机视觉领域的一个重要研究方向&#xff0c;主要用于实现视频监控、人机交互、智能交通等领域。下面介绍几种常用的目标跟踪方法&#xff1a; 特征匹配法 特征匹配法是目标跟踪中最基本的方法之一&#xff0c;其基本原理是通过提取目标的特征&#xff0c;然后在…...

python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-帖子详情页实现

锋哥原创的SpringbootLayui python222网站实战&#xff1a; python222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火爆连载更新中... )_哔哩哔哩_bilibilipython222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火…...

11、Kafka ------ Kafka 核心API 及 生产者API 讲解

目录 Kafka核心API 及 生产者API讲解★ Kafka的核心APIKafka包含如下5类核心API&#xff1a; ★ 生产者APIKafka 的API 文档 ★ 使用生产者API发送消息 Kafka核心API 及 生产者API讲解 官方文档 ★ Kafka的核心API Kafka包含如下5类核心API&#xff1a; Producer API&#x…...

MySQL 8.3 发布, 它带来哪些新变化?

1月16号 MySQL 官方发布 8.3 创新版 和 8.0.36 长期支持版本 (该版本 没有新增功能&#xff0c;更多是修复bug )&#xff0c;本文基于 官方文档 说一下 8.3 版本带来的变化。 一 增加的特性 1.1 GTID_NEXT 支持增加 TAG 选项。 之前的版本中 GTID_NEXTUUID:number &#xff…...

【数据结构】详谈队列的顺序存储及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 协议之前&#xff0c;先来回顾一下 HTTP 协议的概念。 HTTP 协议介绍 HTTP 协议是一种基于文本的传输协议&#xff0c;它位于 OSI 网络模型中的应用层。 HTTP 协议是通过客户端和服务器的请求应答来进行通讯&#xff0c;目前协议由之前的 RFC 2616 拆…...

使用 Node 创建 Web 服务器

Node.js 提供了 http 模块&#xff0c;http 模块主要用于搭建 HTTP 服务端和客户端&#xff0c;使用 HTTP 服务器或客户端功能必须调用 http 模块&#xff0c;代码如下&#xff1a; var http require(http); 以下是演示一个最基本的 HTTP 服务器架构(使用 8080 端口)&#x…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...