Windows 下用MSYS2 环境为RP2040 编译MicroPython 固件

news2025/1/12 21:03:17

就是想试试看MSYS2 能兼容到什么地步。自己做了个RP2040 板子,用了4MB 的Flash,默认的Micropython 固件是2MB 的,所以只能自己编译固件。

编译环境

MSYS2 的安装方法、基本配置什么的我就不管了,到处都有文章介绍这个。只提一点,现在有了Windows Terminal 以后就用不着整什么别的终端模拟器了,只需要打开powershell,运行:

msys2 -ucrt64 -shell fish

就可以直接启用MSYS2 的UCRT64 环境,并且将启动shell 设置为fish,当然需要先pacman 把fish 装上。我是用scoop 安装的MSYS2,不确定其他方式安装之后,启动方式有没有区别。

编译之前,需要pacman -S 安装gitmakecmaketoolchain(包括了gcc)、arm-none-eabi-gccpythonpython-pip-tools。注意安装的时候选择对应ucrt64 环境的版本。既然micropython 的指南里推荐了用virtualenv,那就用一下,拿pip 安装:

pip install virtualenv

然后随便创建个虚拟环境:

virtualenv upy

fish shell 下激活虚拟环境:

source ./upy/bin/activate.fish

其他shell 同理。然后找一个地方把micropython 下载下来:

git clone --recurse-submodules https://github.com/micropython/micropython.git

这样是直接把所有用到用不到的库代码也都下载了,还有库的库,所以整体下载了不少东西,大概5 个G。

编译windows 版MicroPython

可以先这么试一下,编译一份Windows 下直接能运行的MicroPython 解释器。先进入Windows 版本的文件夹

cd micropython/ports/windows

里面有一份README 可以看一下,然后就

make submodules
make

编译完成后,在build-standard 文件下会有一个micropython.exe,运行效果和python 解释器差不多。

在这里插入图片描述
顺便也能看到解释器的源代码版本和编译时间,看起来源码直接编译的话就是preview 版本。

开发板配置文件

要修改Flash 容量,只能先自定义一个开发板配置文件。先进入到rp2040 版本的文件夹:

cd micropython/ports/rp2

所有支持的开发板文件都放在boards 文件夹下,所以就复制粘贴一个别人开发板的文件,比如SPARKFUN_PROMICRO。我自定义的板子取名叫BITTER_BASIC_RP2040,文件夹名称最好保持这种格式。

每个板子的文件夹底下有三个配置文件,依次打开修改成想要的样子。json 文件就是些基本的描述,随便写;cmake 文件是空白的,不管;.h 文件里有Flash 容量有关的宏:

在这里插入图片描述

MICROPY_HW_FLASH_STORAGE_BYTES 表示安装完固件以后Flash 的剩余字节数,15 * 1024 * 1024 表示15MB,就是16MB 的FLASH 去掉1MB,所以4MB 的FLASH 芯片就把这里改成3 * 1024 * 1024。再把板子的名称改掉,我的就是"BITTER BASIC RP2040"。把下面的USB VID 和PID 删掉,这样就使用默认的PICO 开发板的信息。

除了这里,还有一份pico-sdk 的配置文件,也就是RP2040 官方库的配置。进入pico-sdk 的文件夹:

cd micropython/lib/pico-sdk

打开配置文件的位置:

cd src\boards\include\boards

这里每个板子的配置对应一个.h 头文件,一样是拿别人的文件改改。这里头文件名要和之前的文件夹名对应,改成bitter_basic_rp2040.h,我还是用SPARKFUN 的pro micro 文件修改:

在这里插入图片描述

第一个宏改成自己板子的名字BITTER_BASIC_RP2040,方便以后在条件编译里使用。下面定义了板载LED 和WS2812 RGB 的引脚,这个pro micro 板子只有RGB 连在GPIO25 上,没有普通的LED,所以他就把PICO_DEFAULT_LED_PIN 注释掉了,我的板子上LED 和RGB 都有,所以对应修改:

#ifndef PICO_DEFAULT_LED_PIN
#define PICO_DEFAULT_LED_PIN   25
#endif

#ifndef PICO_DEFAULT_WS2812_PIN
#define PICO_DEFAULT_WS2812_PIN 24
#endif

其他的引脚定义没什么好说的,最后就是FLASH 相关的宏:

在这里插入图片描述

PICO_BOOT_STAGE2_CHOOSE_W25Q080 表示Flash 芯片是W25Qxx 这一系列,或者与之兼容的型号,而不是说Flash 芯片是W25Q80。自己做的板子基本都用这种Flash,不用改。

PICO_FLASH_SPI_CLKDIV 是驱动SPI 的时钟分频系数。如果RP2040 CPU 频率125MHz,那么驱动Flash 的SCLK 频率就是62.5MHz。W25Qxx 系列芯片的规格书上说它最高能到100MHz,但是为了稳定性,选个2 分频是比较合适的。

PICO_FLASH_SIZE_BYTES 就是Flash 的实际字节数,4MB 那就改成4 * 1024 * 1024。

编译固件

打开RP2040 的文件夹:

cd micropython/ports/rp2

参考文件夹里附带的README,make 的时候要指定板子的名称,编译过程中,对应的配置文件会自动被使用。开始编译:

make BOARD=BITTER_BASIC_RP2040 submodules
make BOARD=BITTER_BASIC_RP2040 clean
make BOARD=BITTER_BASIC_RP2040

第三步可能会出现报错,比如找不到头文件:

在这里插入图片描述
这可能是因为基于mingw-w64 的arm gcc 编译器不支持MSYS2 这种文件路径格式,尽管它是用pacman 安装的。这样就只能稍微走点弯路,当然,不用想法子把arm gcc 编译一遍找BUG,而是在MSYS2 之外,另外搭一套编译环境。

推荐用scoop 安装,需要的环境包括:cmakegcc-arm-none-eabipython3,如果还需要本机的gcc 编译器,可以安装mingw-winlibs,一站式解决。配置好以后,用powershell 打开刚才rp2040 文件夹,不启动MSYS2。运行make BOARD=BITTER_BASIC_RP2040,应该会输出报错信息:

在这里插入图片描述在命令运行完之前Ctrl-C 关闭掉,否则就手动删除cmake 生成的build-BITTER_BASIC_RP2040 文件夹。复制调用cmake 的命令,另外加上一个参数:

cmake -G "Unix Makefiles" -S . -B build-BITTER_BASIC_RP2040 -DPICO_BUILD_DOCS=0 -DMICROPY_BOARD=BITTER_BASIC_RP2040 -DMICROPY_BOARD_DIR="C:/Users/chris/source/MSYS2/upy-prj/micropython/ports/rp2/boards/BITTER_BASIC_RP2040"

-G "Unix Makefiles" 是让cmake 生成Makefile。这里完成之后,就可以回去MSYS2 继续剩下的步骤。手动调用make:

make -C build-BITTER_BASIC_RP2040/

这里不出意外的话就会跑完,在build-BITTER_BASIC_RP2040 文件下生成.uf2 固件,按标准程序扔进板子里就好了。打开micropython 编辑器mu-editor,没有出问题的话, 打开REPL 之后,这里提示的板子名称就变成了刚才自己设置的名字。

在这里插入图片描述

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

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

相关文章

一次建表语句触发的ORA-600报错分析

​ 某次在客户Oracle数据库执行一条建表语句时,报出ORA-600错误。 报错代码如下: ORA-00600: 内部错误代码, 参数: [rwoirw: check ret val], [], [], [], [], [], [], [], [], [], [], [] 相关的建表语句如下: ​ 在报错发生后,…

拆解COLA框架

COLA 是 Clean Object-Oriented and Layered Architecture的缩写,代表“整洁面向对象分层架构”。由阿里大佬张建飞所提出的一种基于DDD和代码整洁理论所诞生的实践理论框架,详细内容可阅读《程序员的底层思维》和相关git代码去了解 项目地址&#xff1a…

毕业论文初稿写作方法与过程

毕业论文初稿写作方法与过程 毕业论文是大学生在学业结束前必须完成的一项重要任务,它不仅是对学生所学知识的综合运用,也是对学生研究能力和写作能力的检验。写好毕业论文初稿是完成高质量毕业论文的关键一步。下面将具体阐述毕业论文初稿的写作方法和过…

【MySQL】 NDB 集群概述

MySQL NDB(Network Database)是MySQL的一个存储引擎,也称为NDB Cluster存储引擎。它主要用于构建高可用性、高可扩展性和高性能的分布式数据库集群。NDB Cluster是MySQL的一个特殊版本,专门设计用于处理大规模的分布式数据存储和处…

「C++系列」C++ 变量作用域

文章目录 一、C 变量作用域二、局部变量三、全局变量四、类作用域五、相关链接 一、C 变量作用域 在C中,变量的作用域(Scope)指的是变量在程序中可以被访问的区域。作用域由花括号{}定义,这些花括号可以出现在函数体、控制结构&a…

[C++]——同步异步日志系统(2)

同步异步日志系统 一、 不定参函数1.1 不定参宏函数的使用1.2 C 语言中不定参函数的使用1.3 C不定参数使用 二、设计模式2.1 单列模式2.2 工厂模式2.3 建造者模式2.4 代理模式 在我们开发同步异步日志系统之前,需要了解一些相关的技术知识。 一、 不定参函数 在初学…

WPF UI 界面布局 魔术棒 文字笔记识别 技能提升 布局功能扩展与自定义 继承Panel的对象,测量与排列 系列七

应用开发第一步 功能分类:页面上的功能区域划分。。。。需求分析 业务逻辑 数据流 功能模块 UI/UX 编码 测试 发布 功能开发与布局 不用显式的方式设定元素的尺寸 不使用屏幕坐标来指定位置 Grid 功能最强大,布局最灵活的容器…

视频融合共享平台LntonCVS视频监控汇聚平台工业视频监控系统

LntonCVS是一款功能强大、灵活部署的安防视频监控平台,具备广泛的扩展性和视频能力。它支持多种主流标准协议,如国标GB28181、RTSP/Onvif、RTMP,同时还能兼容厂家的私有协议和SDK,如海康Ehome、海大宇等。除了传统的安防监控功能外…

阿里巴巴Arthas分析调优JVM实战及常量池详解

目录 一、阿里巴巴Arthas详解 Arthas使用场景 Arthas命令 Arthas使用 二、GC日志详解 如何分析GC日志 CMS G1 GC日志分析工具 三、JVM参数汇总查看命令 四、Class常量池与运行时常量池 字面量 符号引用 五、字符串常量池 字符串常量池的设计思想 三种字符串操作…

Linux 账号安全管理及应用

一、账号安全控制 1.系统账号清理 1.1 将非登录用户设置为无法登录 usermod -s /etc/nologin pkm #将名为pkm 用户的shell设为/sbin/nologin 用户 pkm 将无法登录 1.2 锁定长期不使用的账号 usermod -L 用户名 #锁定用户账号密码 usermod -U …

TCP报文校验和(checksum)计算

一. 原理 将TCP相关内容&#xff08;TCP伪头部TCP头部TCP内容&#xff09;转换成16比特的字符&#xff0c;然后进行累加&#xff0c;最后结果进行取反。TCP伪头部是固定的&#xff0c;下文有相关代码展示。 二. 源码 源码 #include <stdio.h> #include <stdlib.h&…

在 VS Code 中自动化 Xcode 项目编译和调试

在 VS Code 中自动化 Xcode 项目编译和调试 在日常的开发工作中&#xff0c;Xcode 是 macOS、iOS、watchOS 和 tvOS 应用程序开发的主要工具。为了提高工作效率&#xff0c;许多开发者选择在 Visual Studio Code (VS Code) 中编辑代码&#xff0c;并希望能够直接从 VS Code 启…

人工智能系列-numpy(一)

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” Numpy是python语言的一个拓展程序库&#xff0c;支持大量的维度数组与矩阵计算&#xff0c;此外也针对数组运算提供大量的数学函数库 NumPy支持的数据类型比Python内置的类型要…

系统架构设计师教程(清华第2版)<第1章 绪论>解读

系统架构设计师教程 第一章 绪论 1.1 系统架构概述1.1.1 系统架构的定义及发展历程1.1.2 软件架构的常用分类及建模方法1.1.3 软件架构的应用场景1.1.4 软件架构的发展未来1.2 系统架构设计师概述1.2.1 架构设计师的定义、职责和任务1.2.2 架构设计师应具备的专业素质1.3 如何成…

计算机的错误计算(二十一)

摘要 两个不相等数相减&#xff0c;差为0&#xff1a; ? 在计算机的错误计算&#xff08;十九&#xff09;中&#xff0c;高中生小明发现本应为0的算式结果不为0. 今天他又发现对本不为0的算式&#xff0c;计算机的输出为0. 在 Python 中计算 &#xff1a; 则输出为0. 若用 C…

ArmPiPro-环境变量

V0.0 2024-07-04 V0.1 加入开发环境和PI4关于ROS的环境变量的对比 1.我们可以用env | grep ROS来查看Pi4中的ROS环境变量 如下图所示&#xff0c;不理解的&#xff0c;抛给AI快速了解一下。 2.ArmPiPro安装的ROS是ROS1-melodic 3.在开发时&#xff0c;需要在笔记本电脑上开一…

天环公益原创开发进度网站源码带后台免费分享

天环公益计划首发原创开发进度网站源码带后台免费分享 后台地址是&#xff1a;admin.php 后台没有账号密码 这个没有数据库 有能力的可以自己改 天环公益原创开发进度网站 带后台

how to use Xcode

Xcode IDE概览 Xcode 页面主要分为以下四个部分&#xff1a; 工具栏&#xff08;ToolBar area&#xff09;&#xff1a;主要负责程序运行调试&#xff0c;编辑器功能区域的显示 / 隐藏&#xff1b;编辑区&#xff08;Editor area&#xff09;&#xff1a;代码编写区域&#xf…

MYSQL8.0环境部署

创建用户 groupadd mysql useradd -g mysql mysql 删除原来的包 # rpm -qa|grep mysql # rpm -qa|grep mari mariadb-libs-5.5.68-1.el7.x86_64 # rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64 解压 cd /usr/local & mkdir mysql cd mysql # cp mysql-8…

记一次 .NET某网络边缘计算系统 卡死分析

一&#xff1a;背景 1. 讲故事 早就听说过有什么 网络边缘计算&#xff0c;这次还真给遇到了&#xff0c;有点意思&#xff0c;问了下 chatgpt 这是干嘛的 ? 网络边缘计算是一种计算模型&#xff0c;它将计算能力和数据存储位置从传统的集中式数据中心向网络边缘的用户设备、…