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作为库和本地模块构建的示例代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/638373.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

class_14:继承

C继承有点类似于c语言 结构体套用 #include <iostream> #include <string> using namespace std;//基类,父类 class Vehicle{ public:string type;string contry;string color;double price;int numOfWheel;void run();void stop(); };//派生类&#xff0c…

commit 历史版本记录修正

commit 历史版本记录修正 当 Bug 发生的时候&#xff0c;我们会需要去追踪特定 bug 的历史记录&#xff0c;以查出该 bug 真正发生的原因&#xff0c;这个时候就是版本控制带来最大价值的时候。 因此&#xff0c;要怎样维持一个好的版本记录是非常重要的&#xff0c;下面是一…

Rockchip linux USB 驱动开发

Linux USB 驱动架构 Linux USB 协议栈是一个分层的架构&#xff0c;如下图 5-1 所示&#xff0c;左边是 USB Device 驱动&#xff0c;右边是 USB Host 驱动&#xff0c;最底层是 Rockchip 系列芯片不同 USB 控制器和 PHY 的驱动。 Linux USB 驱动架构 USB PHY 驱动开发 USB 2…

Java三大集合

什么是List接口&#xff1f;它有哪些实现类&#xff1f; List接口是Java集合框架中的一种重要接口&#xff0c;它继承自Collection接口&#xff0c;是单列集合的一个重要分支。List接口允许出现重复的元素&#xff0c;所有的元素是以一种线性方式进行存储的&#xff0c;在程序…

手机也能随时随地玩红警啦!

还在为找不到红警安装包苦恼吗&#xff1f; 现在可以随时随地&#xff0c;无论手机、ipad、电脑都可以无需安装包在线玩红警啦&#xff01;&#xff01; 不仅能本地单机玩耍&#xff0c;还能联网玩耍&#xff08;可以和老外一起玩哦&#xff5e;&#xff09; 具体在线链接可…

Codeforces Round 920(div3)A - G except E

A - Square 思维按行或列排序 signed main() {int T 1;T read();while (T--) {vector<pii> vec;for (int i 1; i < 4; i) {int u read(), v read();vec.push_back({u, v});}sort(vec.begin(), vec.end());int a abs(vec[0].second - vec[1].second);int b ab…

算法第二十一天-丑数

丑数 题目要求 解题思路 首先判断数字是不是为0或者负数&#xff0c;两者均不可能成为丑数&#xff1b; 之后对n进行不断整除&#xff0c;直到无法除尽为止。 简单判断最后的数是不是1即可。 代码 class Solution:def isUgly(self, n: int) -> bool:if n<0:return Fa…

Linux启动流程梳理值得收藏

Linux启动流程总的来说可以分成三个阶段 Linux启动流程图 第一步&#xff1a;上电 在 x86 系统中&#xff0c;将 1M 空间最上面的 0xF0000 到 0xFFFFF 这 64K 映射给 ROM。 当电脑刚加电的时候&#xff0c;会做一些重置的工作&#xff0c;将 CS 设置为 0xFFFF&#xff0c;将 IP…

Docker命令---搜索镜像

介绍 使用docker命令搜索镜像。 命令 docker search 镜像命令:版本号示例 以搜索ElasticSearch镜像为例 docker search ElasticSearch

【unity】麦克风声音驱动,控制身体做出不同动作

1.在角色对象上挂在animator组件&#xff0c;并将动作控制器与其关联 2.在角色对象上挂在audio source组件。 3.新建voice control脚本&#xff0c;编写代码如下&#xff1a; using System; using System.Collections; using System.Collections.Generic; using UnityEngine;…

复现PointNet++(语义分割网络):Windows + PyTorch + S3DIS语义分割 + 代码

一、平台 Windows 10 GPU RTX 3090 CUDA 11.1 cudnn 8.9.6 Python 3.9 Torch 1.9.1 cu111 所用的原始代码&#xff1a;https://github.com/yanx27/Pointnet_Pointnet2_pytorch 二、数据 Stanford3dDataset_v1.2_Aligned_Version 三、代码 分享给有需要的人&#xf…

算法专题[递归-搜索-回溯-2-DFS]

算法专题[递归-搜索-回溯-2-DFS] 一.计算布尔二叉树的值&#xff1a;1.思路一&#xff1a;2.GIF题目解析 二.求根节点到叶子节点的数字之和1.思路一&#xff1a;2.GIF题目解析 三.二叉树剪枝1.思路一&#xff1a;2.GIF题目解析 四.验证二叉搜索树1.思路一&#xff1a;2.GIF题目…

1.2 数据模型

数据模型是对现实世界数据特征的抽象&#xff0c;是现实世界的模拟 数据模型是用来描述数据、组织数据和对数据进行操作的 数据模型应满足三方面要求&#xff1a; 1 能比较真实地模拟现实世界 2 容易为人所理解 3 便于在计算机上实现 数据模型…

08. Springboot集成webmagic实现网页爬虫

目录 1、前言 2、WebMagic 3、Springboot集成Webmagic 3.1、创建Springboot&#xff0c;并引入webmagic依赖 3.2、定义PageProcessor 3.3、元素选择 3.3.1、F12查看网页元素 3.3.2、元素选择 3.3.3、注意事项 4、小结 1、前言 在信息化的时代&#xff0c;网络爬虫已…

QT的绘图系统QPainterDevice与文件系统QIODevice

QT的绘图系统&#xff08;QPainterDevice&#xff09;与文件系统&#xff08;QIODevice&#xff09; 文章目录 1、Qt 的绘图系统1、QPainter的使用2、QPen(画笔&#xff09;及QBursh&#xff08;画刷&#xff09;3、手动更新窗口4、绘图设备1、四种绘图设备的 区别2、 QBitmap3…

零食折扣店,注定昙花一现?

年终岁末&#xff0c;又到了各类休闲零食产品一年一度的销售旺季。与过去不同的是&#xff0c;近年来的休闲零食赛道正因大量零食折扣店的涌现而显得热闹非凡。 随着主打折扣、低价的零食折扣店成为消费者特别是三四线下沉市场消费者的新宠&#xff0c;资本开始涌入并快速推动…

SpringCloud之OpenFeign的学习、快速上手

1、什么是OpenFeign OpenFeign简化了Http的开发。在RestTemplate的基础上做了封装&#xff0c;在微服务中的服务调用发送网络请求起到了重要的作用&#xff0c;简化了开发&#xff0c;可以让我们跟写接口一样调其他服务。 并且OpenFeign内置了Ribbon实现负载均衡。 官方文档…

69.使用Go标准库compress/gzip压缩数据存入Redis避免BigKey

文章目录 一&#xff1a;简介二&#xff1a;Go标准库compress/gzip包介绍ConstantsVariablestype Headertype Reader 三&#xff1a;代码实践1、压缩与解压工具包2、单元测试3、为何压缩后还要用base64编码 代码地址&#xff1a; https://gitee.com/lymgoforIT/golang-trick/t…

SpringBoot3整合OpenAPI3(Swagger3)

文章目录 一、引入依赖二、使用1. OpenAPIDefinition Info2. Tag3. Operation4. Parameter5. Schema6. ApiResponse swagger2更新到3后&#xff0c;再使用方法上发生了很大的变化&#xff0c;名称也变为OpenAPI3。 官方文档 一、引入依赖 <dependency><groupId>…

汇编语言学习1

Compiler Explorer (godbolt.org) 这个网站可以把我们写的C语言等实时翻译为汇编等语言&#xff0c;便于参考 一个不错的视频讲解 riscv(RISC-V)指令集(MIT) A01 Introduction_哔哩哔哩_bilibili risc-v汇编中&#xff0c;a0, a1, ... 用来传送函数参数&#xff0c;a0, a1用来…