在Linux下编译micropython源码的方法(包括win10的ubuntu子系统)

2023-11-19

本文介绍了在Linux下编译micropython源码的方法,包括了虚拟机、win10子系统等。

在Win10的应用商店中,提供了Linux的子系统,这是实际上是一个虚拟机软件,与virtualbox和vmplayer功能类似。下面就介绍在Linux子系统中安装工具链和编译micropython的方法。

先确认一下Windows10系统的版本,如果是LTSB版(Long Time Service Branch 企业长期服务版),就需要更换到企业版,LTSB版是不能运行Linux子系统的。如果还没有安装过Linux子系统功能,首先需要在控制面板的“程序和功能”中允许适用于Linux的Windows子系统功能,并重新启动计算机。

然后就可以在应用商店中,通过搜索Linux或者ubuntu,找到ubuntu应用。注意现在应用商店里ubuntu有两个版本,分别是16.04和18.04。

这两个版本都是长期服务器版,但是我们需要选择第一个,也就是16.04版本,因为目前gcc-arm编译器还没有支持18.04,使用18.04版本就需要自己手工安装编译器,比较麻烦。

 


安装好ubuntu后,运行就会出现下面的控制台样式窗口,它默认是只有控制台(shell)界面,没有图形化界面。我们可以通过 lsb_release -a 命令查看系统版本。

这个新安装的ubuntu可以看成是一个全新的系统,大部分软件都需要自己安装。我们先安装arm-gcc编译器,同时可以更新一下软件仓库的内容。

sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa
sudo apt update
sudo apt install gcc-arm-embedded

然后安装git软件:

sudo apt install git

还需要安装gcc编译器make软件:

sudo apt install gcc make

到这一步,需要的软件基本安装完成,下面是用 git 同步下载 micropython 源码。虽然可以使用zip方式下载,但是这样不方便和源码同步更新。我们先在用户目录中创建一个projects目录,将micropython下载到projects目录中:

cd
mkdir projects
cd projects
git clone https://github.com/micropython/micropython

因为文件比较多,github在国内访问速度也不快,下载速度与网络有很大关系。如果下载出错,需要重复这个步骤。

成功下载后,进入micropython目录,先下载使用到的其它库文件:

cd micropython
git submodule update --init

micropython引用的外部库也比较多,下载需要一定时间。如果提示超时或者下载失败,需要重复前面过程。

下载源码后,就可以开始编译了,首先是编译mpy-cross,它是一个micropython的辅助工具,在编译过程中会用到。

在micropython源码的根目录中,输入下面命令:

make -C mpy-cross

这个程序不大,编译速度也比较快。编译后就可以开始编译STM32的程序了,下面命令是编译官方的pybv10开发板固件:

make -C ports/stm32

 


如果是编译其它开发板,就需要在命令行中指定板子的名称,注意BOARD必须大写,等号两边不能有空格:

make -C ports/stm32 BOARD=STM32F7DISC

如果其它开发板,更换板子的名称就可以。如果是自己定义的板子,还需要将开发板的定义文件添加到ports/stm32/board目录下。

以后如果micropython代码更新了,我们就可以通过git同步更新,然后再次编译。

git pull

编译前最好先清除以前的编译内容,这样可以避免因为更新造成的编译错误

make -C ports/stm32 clean
make -C ports/stm32

上面编译的固件是默认方式,不带有双精度浮点,也不支持线程功能。如果希望添加线程功能,需要打开板子的配置文件mpconfigboard.h,然后在文件中添加下面两行:

#define MICROPY_PY_THREAD           (1)
#define MICROPY_PY_THREAD_GIL       (1)

然后先清除以前的临时文件,再重新编译。

如果需要双精度浮点功能,在编译时命令行中,添加 MICROPY_FLOAT_IMPL=double。

编译速度与计算机的配置有较大关系,配置越高,CPU性能越好,速度越快。此外如果计算机使用了普通硬盘,第一次编译也会较慢,需要较多的时间加载程序,使用SSD硬盘时,第一次编译速度明显快很多。在一个Windows10平板上(cpu的N3450,),编译1.9.4版本的固件,使用了约260秒,而相同情况下使用虚拟机编译约160秒,看起来Linux子系统的性能还有很大改进的空间。

编译后,产生的固件在 ports/stm32/build-xxxxx 目录下(xxxxx是板子的名称),编译会同时产生elf、dfu、hex三种格式的文件。dfu适合通过USB方式升级,elf和hex可以使用jlink、stlink通过SWD下载(会丢失用户磁盘内容)。

编译好固件怎样复制到windows主机呢?在Linux子系统中,默认已经将windows的各分区挂载好了,我们可以在 /mnt 目录下看到。将固件复制到进去就可以了。如果不习惯用命令行方式操作,可以安装一个midinight commander软件,它类似早期的norton commander,可以方便的管理文件。

sudo apt install mc

 


使用Linux子系统,好处在于安装和使用简单,安装后可以直接运行,没有复杂的配置,文件体积比使用虚拟机要小,占用系统资源也较少。Linux系统作为windows的一个程序,比传统用虚拟机方式更加容易使用。缺点是不能选择用户数据存放的目录,所有文件都会保存到系统盘,需要在系统盘留出足够的空间,此外性能比传统虚拟机低。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Linux下编译micropython源码的方法(包括win10的ubuntu子系统) 的相关文章

  • 使用 pdfkit 和 FastAPI 下载 PDF 文件

    我将使用 FastAPI 创建一个 API 将HTML页面到 PDF 文件 使用pdfkit 但是 它将文件保存到我的本地磁盘 当我在线提供此API后 用户如何将该PDF文件下载到他们的计算机上 from typing import Opt
  • Python:如果满足条件,则循环遍历一个字典并在新字典中创建键/值对

    我想将一个字典的值与第二个字典的值进行比较 如果值满足特定条件 我想创建第三个字典 其中的键和值对将根据匹配情况而变化 这是一个显示我的问题的人为示例 编辑 对所有返回感到抱歉 但堆栈溢出无法识别单个返回 并且在一行上运行 3 4 行 使代
  • 扭曲多种协议

    我希望为我正在从事的项目学习扭曲 该项目需要服务器响应 HTTP 请求以及通过 TCP 连接的其他协议 Twisted能够同时处理多种协议吗 我想使用 Twisted Web 来帮助处理 HTTP 但同时需要响应其他端口上的 TCP 连接
  • 配置 PIP 以在代理后面工作

    我已经安装了 python 3 4 3 附带pip 我想从代理后面使用 pip 所以我执行了以下操作 Created C Users foo pip pip ini并添加了代理配置部分 proxy export http proxy my
  • 让 Django 提供可下载文件

    我希望网站上的用户能够下载路径被遮挡的文件 因此无法直接下载它们 例如 我希望 URL 是这样的 http example com download f somefile txt 在服务器上 我知道所有可下载的文件都位于该文件夹中 home
  • Native TF 与 Keras TF 性能比较

    我使用本机和后端张量流创建了完全相同的网络 但在使用多个不同参数进行了多个小时的测试后 仍然无法弄清楚为什么 keras 优于本机张量流并产生更好 稍微但更好 的结果 Keras 是否实现了不同的权重初始化方法 或者执行除 tf train
  • NLTK:包错误?朋克和泡菜?

    基本上 我不知道为什么会收到此错误 只是为了获得更多图像 这里有一个代码格式的类似消息 由于是最新的 该帖子的答案已经在消息中提到 Preprocessing raw texts LookupError Traceback most rec
  • 如何使用 django Rest 框架保存多对多字段对象

    我有博客 发布 标签三个模型 在博客模型中 我将字段 postedin 作为发布模型的外键 将 标签 作为标签模型的许多字段 模型 py class Posted models Model name models CharField Pos
  • 在Python中整齐地绘制PMF

    有没有一个库可以帮助我在 python 中整齐地绘制样本的概率质量函数 如下所示 通过matplotlib pyplot的stem模块 matplotlib pyplot stem args kwargs from matplotlib p
  • 如何在 Django 中像应用程序一样从配置中注册 Flask 蓝图?

    如何从我的配置中注册 Flask 蓝图 就像 Django 中的应用程序一样 我想在配置文件中定义蓝图 它将自动注册 config py BLUEPRINTS news files 实际上我一直在一个暂定名为的项目中勾勒出类似的东西臀部口袋
  • Python3 - 如何将字符串转换为十六进制

    我正在尝试将字符串逐个字符转换为十六进制 但我无法在Python3中弄清楚它 在较旧的 python 版本中 我的以下内容有效 test This is a test for c in range 0 len test print 0x s
  • 无法使用 wxPython 打开在 folium 中生成的本地 HTML 文件

    我目前正在尝试将 GPS 坐标绘制为地图上的标记 并在 wxPython 中显示结果 我使用 folium 绘制坐标标记并生成 HTML 文件 import folium fmap folium Map 43 5321 172 6362 z
  • NumPy 根据另一个数组中的值对第三个数组中的每个匹配元素求和一个数组

    我有两个 numpy 数组 一个包含值 另一个包含每个值类别 values np array 1 2 3 4 5 6 7 8 9 10 valcats np array 101 301 201 201 102 302 302 202 102
  • 在 Python 中通过网络发送对象的最佳方式是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我需要通过网络发送对象 我将使用 Twisted 并且我刚刚开始查看它的文档 据我所知 python实现套接字的唯一方式是通过文本 那么我如何使
  • 如何在 FastAPI Swagger API 中按方法类型对方法进行排序?

    如何在 FastAPI Swagger 自动文档中设置 API 方法的排序顺序 我希望所有方法按类型分组 GET POST PUT DELETE 这个答案 https stackoverflow com questions 24951268
  • Django - 渲染到字符串无法加载 CSS

    我正在尝试使用 Django 1 8 render to string 通过管理命令将 html 转换为 pdf 而不是使用 View request 以下代码可以将模板转换为 pdf 但它无法将 CSS 加载到模板中 def html t
  • 使用 Python 获取 Youtube 数据

    我正在尝试学习如何分析网络上可用的社交媒体数据 我从 Youtube 开始 from apiclient errors import HttpError from outh2client tools import argparser fro
  • Hoare Partitioning算法讲解

    根据许多网站给出的伪代码 我写了这个Hoare分区算法 它采用一个数组 根据给定的主元来分区子数组的开始和结束索引 它工作得很好 但是有人可以解释一下逻辑 它是如何做到这一点的吗 这是代码 def hoare arr start end p
  • 如何将动态数据传递给装饰器

    我正在尝试编写一个基本的 CRUD 控制器类来执行以下操作 下列的 class BaseCrudController model field validation template dir expose self template dir
  • 在不同进程之间共享列表?

    我有以下问题 我编写了一个函数 它将列表作为输入 并为列表中的每个元素创建一个字典 然后我想将这本字典附加到一个新列表中 这样我就得到了一个字典列表 我正在尝试为此生成多个进程 我的问题是 我希望不同的进程访问由其他进程更新的字典列表 例如

随机推荐

  • 常用的转义字符 C语言

    转义字符 转义字符是一种特殊的字符常量 以反斜线 开头 后跟字符 具有特定的含义 不同于字符原有的含义 故称 转义 字符 上表 转义字符 含义 n 回车换行 光标移到下一行的行首 r 回车 光标移到当前行的行首 把当前行前面全部删掉 t 制
  • 【pyqt5学习】——菜单栏(QMenu())、工具栏QToolBar学习

    目录 1 菜单栏 QMenu 一般在窗口顶部 1 创建菜单栏步骤 2 信号与方法 3 实操 2 工具栏 一般在菜单栏下方 1 创建步骤 2 方法与信号 信号 方法 3 实操示例 3 状态栏QStateBar 用于显示状态信息 一般在窗口底部
  • 微信开放平台接入问题

    1 errcode 40163 errmsg code been used rid xxxxx 原因 获取token时 使用的code码被二次使用 2 errcode 40249 errmsg this template msg has b
  • python中的unicode

    Python s Unicode string type stores characters from the Unicode character set In this set each distinct character has it
  • 怎么样不使用python做到图片爬虫呢?试试这个神奇软件吧

    1 首先在 主题 选项 选择你需要搜索的内容 2 填写需要下载的文件数量 这个需要留意 如果没有更改保存地址 那么会覆盖以前的文件 3 任意选择一个你想保存的地址 链接 https pan baidu com s 16yKPdUEC355j
  • Eureka迁移到Nacos之服务名称大小问题解决

    我们应用往Eureka中注册使用的名称以及应用内部通过Feign调用 使用的服务名称都是小写 如user service 但是注册到Eureka中后 应用的名称全部都是以大写的形式存储及展现 由于Eureka客户端对大小写的支持都是一样的
  • 前端工程化:模块化、包管理工具、打包工具(Webpack基本使用和优化)、前端性能监控

    目录 1 模块化 1 CommonJS AMD CMD 1 1 背景 1 2 CommonJS规范的核心变量 1 3 exports module exports 和require本质 1 4 exports和module exports的
  • 为什么有些Buck-Boost芯片没有输出负压?

    大家好 这里是大话硬件 今天分享一篇和Buck Boost拓扑相关的问题 也是在最开始接触Buck Boost芯片时 就在内心产生了疑问 在开始学习DC DC拓扑时 很多资料都说 非隔离型的DC DC拓扑常见的有3种 分别是Buck Boo
  • 破解sqlyog 30天试用限制

    安装sqlyog后 进入注册表编辑器 进入 HEYK CURRENT USER Software 找到以 括起来的那项 最新10 XX版本的是 8E919370 318F 4E5E 9EbE 9147B1DB66C9 不用去关注里面的值 右
  • ‘Web\xxx\node_modules\.bin\‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。internal/modules/cjs/loader.js:905throw err

    运行 npm run serve 报上面的错误 错误原因 文件夹名称中不能有
  • Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示

    一 当我们用Python matplot时作图时 一些数据需要以百分比显示 以更方便地对比模型的性能提升百分比 二 借助matplotlib ticker FuncFormatter 将坐标轴格式化 例子 encoding utf 8 im
  • C语言:整型在内存中的存储及表示形式(附习题)

    我们都知道 一个变量的创建是要在内存中开辟空间的 而空间的大小是根据不同的类型而决定的 那么数据在开辟空间中是如何存储的呢 首先我们先了解以下概念 一 整数的表示形式 原码 反码 补码 计算机中的整数有三种表示方法 即原码 反码和补码 三种
  • Unity 使用LineRenderer连接2个物体

    1 在Hierarchy面板中创建2个GameObject A和B 这就是希望连接的2个物体 2 同理创建1个EmptyObject C 挂上LineRenderer组件 记得给Materials赋值 3 创建1个新的C 脚本LineMan
  • jenkins解决不能打印springboot启动日志问题

    背景 已经可以在jenkins打包部署 但不能显示springboot启动日志 导致springboot启动报错时 并不知道具体原因 还需要登录linux系统去查看原因 主要步骤 1 开启远程服务器日志 2 利用sed命令 结束tail命令
  • String类

    下面是关于String类1相关的知识点 关于Java JDK 中内置的一个类 java lang String 1 String表示字符串类型 属于引用数据类型 不属于基本数据类型 2 在java 中随便使用双引号括起来的都是String对
  • 计算机领域中随处可见的抽象

    想要管理多种具体的东西 那么需要遵守每种东西的规范 如果想要提供一种通用模式来对这些具体的东西统一管理 需要使用一种古老的技术 抽象 抽象是将多种具体的东西 管理时需要遵守的规范 的共同点抽取出来 放入到更高一层的抽象层 在抽象层不定义或少
  • unix环境高级编程——文件IO

    本期主题 unix环境高级编程 文件IO 文件IO 0 引言 1 文件描述符 2 IO编程中常用的API接口 1 open函数 2 close函数 3 read函数 4 write函数 5 lseek函数 3 函数sync fsync和fd
  • 51单片机中断详解(上)

    一 中断的概念 中断发生 CPU在处理某一事件A时 发生了另一事件B请求CPU迅速去处理 中断响应和中断服务 CPU暂时中断当前的工作 转去处理事件B 中断返回 待CPU将事件B处理完毕后 再回到原来事件A被中断的地方继续处理事件A 这一过
  • pgpool-II常见错误

    持续更新中 1 pg hba中的项不匹配 假设您的pgpool集群中有2个节点 您更新了其中一个节点中的pg hba conf条目 但忘记在其他节点上应用相同的条目 您会看到如下错误 psql d postgres U postgres h
  • 在Linux下编译micropython源码的方法(包括win10的ubuntu子系统)

    本文介绍了在Linux下编译micropython源码的方法 包括了虚拟机 win10子系统等 在Win10的应用商店中 提供了Linux的子系统 这是实际上是一个虚拟机软件 与virtualbox和vmplayer功能类似 下面就介绍在L