admin 管理员组

文章数量: 886992

基于Windows系统搭建micropython原生开发环境

苏勇,suyong_yq@126,2021-01

文章目录

  • 基于Windows系统搭建micropython原生开发环境
    • 引言
    • 下载资料
    • 安装msys2
    • 在msys2中安装make工具
    • 在msys2中安装gcc编译器
    • 在msys2中安装python3
    • 在msys2中安装arm-gcc-none-eabi编译器
    • 编译micropython中的minimal工程验证工具链
      • 编译mpy-cross编译器
      • 编译minimal工程
    • 参考资料

引言

micropython的原生开发环境基于Linux系统,但对大多数国内的单片机工程师来说,使用Linux系统并不是那么方便,毕竟大量熟悉的工具软件都是运行在Windows上。编译micropython工程的过程中,需要使用make工具执行一系列定制的自动化操作,包括调用python脚本进行一些“预扫描”,自动生成一些源代码。这些操作是不能直接在大家熟悉的基于Windows系统的IAR或者Keil集成开发环境中直接实现,因此在目前情况下,使用Linux的工具链仍是入门micropython开发的最佳选择。虽然也可以用虚拟机在Windows中内嵌一个Linux,但频繁在两个系统之前切换也是比较闹心的事情,需要处理很多跟开发不太相关的问题。

在本文中,利用msys2工具包,在Windows系统中模拟Linux系统中常用的命令行工具,再配合Windows平台下的python3语言解释器和arm-gcc-none-eabi编译器编译器,搭建可以无缝对接原生平台的micropython开发环境。

下载资料

下载如下软件的Windows版本:

  • msys2: http://www.msys2/
  • python-3.8: https://www.python/
  • gcc-arm-none-eabi: https://developer.arm/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads

另外,make和gcc工具是通过msys2内部的pacman软件包管理器下载的,通过命令行启动下载过程。

安装msys2

MSYS2 是MSYS的一个升级版,准确的说是集成了pacman和Mingw-w64的Cygwin升级版, 提供了bash shell等linux环境、版本控制软件(git/hg)和MinGW-w64 工具链。与MSYS最大的区别是移植了 Arch Linux的软件包管理系统 pacman(其实是与Cygwin的区别)。下文中我们将会使用pacman命令安装make等工具。

在官网上下载最新的安装包:msys2-x86_64-20201109.exe。启动安装,安装到C盘根目录下即可。

安装完之后可以试用一下Linux下的文件夹查看命令“ls”,可以正常运行,然后再调用Windows系统下的“explorer .”命令查看当前的工作目录。从图中可以看到,msys2在自己的安装目录下为用户专门创建了用户目录,并包含了该用户环境的配置文件。例如,在后续开发中,我们可能会在“.bashrc”文件中配置一些“alias”条目定制自己专属的缩写命令等等。

此时只是安装了一个基本的运行环境,尚未安装make、python等工具。

在msys2中安装make工具

micropython使用makefile组织工程的build过程,需要使用make工具处理makefile中的命令。

首先要修改pacman的软件源。使用过archlinux的应该会知道,使用pacman安装软件的时候,如果没有设置好软件源,下载会非常慢。

需要修改三个文件:

  • \etc\pacman.d\mirrorlist.mingw32
  • \etc\pacman.d\mirrorlist.mingw64
  • \etc\pacman.d\mirrorlist.msys


国内用户推荐使用清华大学或者中国科技大学的源。但其实,在默认安装后,这三个配置文件就已经包含了它们的源地址了。

下载工具包就是纯粹的pacman命令了。常用指令有:

pacman -Sy    # 更新软件包数据 
pacman -Syu   # 更新所有 
pacman -Ss xx # 查询软件xx的信息 
pacman -S xx  # 安装软件xx

先运行命令查询完成的make工具的完整名称:

pacman -Ss make


这里可以看到每个软件大致分为了三大类:mingw32、mingw64和msys。我们使用的是msys2,对应下载msys类就行。

运行命令下载并安装make工具:

pacman -S msys/make


安装完成。

在msys2中安装gcc编译器

micropython需要在本机上先build出一个mpy-cross的交叉编译器。这个mpy-cross是在本机(Windows系统下)运行的,用于将py脚本文件编译成可以在micropython中集成的模块,此时的micropython可以运行在任何平台,例如ARM MCU上。

同样使用pacman安装gcc,先查看有可用的版本,然后安装。

pacman -Ss gcc

pacman -S msys/gcc

在msys2中安装python3

安装python的时候不再使用pacman,毕竟使用pacman下载还是太慢。这里我直接将预先准备好的python的安装文件夹复制到msys2的安装目录中,然后再将python的可执行程序路径加到msys2的PATH中,从而能让msys2识别到python命令。

复制安装的软件包统一存放在“C:/msys64/usr”目录下。

之后在profile文件中添加对python的引用路径。定位到文件“C:/msys64/etc/profile”,在文件末尾添加内容如下:

export PATH="/usr/Python38:/usr/Python38/Scripts:$PATH"


最后通过source命令,激活在profile文件中的更新。

source  /ect/profile

通过echo命令查看PATH变量的最新值,其中已经包含了关于python的引用路径。然后再试着运行python命令查看版本号,从而验证python已经可以在msys2中被正常调用。

在msys2中安装arm-gcc-none-eabi编译器

安装arm-gcc-none-eabi编译器的过程同安装python类似,也是复制安装的操作过程。ARM官网提供压缩包发布的arm-gcc-none-eabi的编译器工具包,下载后解压到“C:/msys64/usr”目录下:

之后在profile文件中添加对python的引用路径。定位到文件“C:/msys64/etc/profile”,在文件末尾添加内容如下:

export PATH="/usr/gcc-arm-none-eabi-10-2020-q4-major/bin:$PATH"

注意,此处的PATH是在之前包含python路径的基础之上叠加的。

最后再次通过source命令,激活在profile文件中的更新。

source  /etc/profile

通过echo命令查看PATH变量的最新值,其中已经包含了关于arm-gcc-none-eabi的引用路径。然后再试着运行arm-gcc-none-eabi命令查看版本号,从而验证arm-gcc-none-eabi已经可以在msys2中被正常调用。

至此,基于Windows系统的micropython原生开发环境已经初步搭建完成。

编译micropython中的minimal工程验证工具链

micropython代码库中的“minimal"工程可以作为在一个新MCU平台上移植和开发micropython的起点。它本身是以STM32F407微控制器为目标平台的,对应ARM Cortex-M4F处理器内核。这里通过build这个工程,验证工具链是否全部正确运行。

从micropython官网上下载源代码压缩包(这里不建议用git clone的方式克隆代码库,因为代码仓库里的很多子模块的链接已经失效,重新下载已经无法获得源码)。将代码解压到msys2的用户目录下“C:\msys64\home\Andrew\micropython-1.13”。

编译mpy-cross编译器

首先编译mpy-cross编译器。这个编译过程用到python和gcc。

这里报错说找不到python3,看来在micropython的makefile里是显式调用了python3。这里我有两个思路:

  • 方法1: 只要在makefile中找到对应的命令,将“python3”改成“python”即可。这种方法适用于少量改动,或者改一个地方,就能全局生效的情况。
  • 方法2: 在指定位置创建软连接。这种方式可以确保完全不动micropython的原生代码,确保同Linux原生环境完全一致。

在具体试验的过程中,我优先选择了方法2进行尝试,几经折腾发现还是不能顺利build,最后不得以通过方法1解决问题。在micropython源码目录下搜索,找到在makefile文件中指定PYTHON命令的地方,将它们改名为“python”即可。

实际上,在最近版本的Ubuntu系统中,已经用python3作为默认的python了,所以后续的micropython版本可能也会修掉这里显式调用python3的做法。

重新make一下mpy-corss,又报错:

这个关于中文编码的问题,我之前在英文版Windows下就没有遇到过,但是在中文版Windows中就重现了。参考网上的解决方法,需要在相关打开文件的语句中增加参数“encoding=‘UTF-8’”

再次make,终于编通了。

编译minimal工程

在msys2环境中切换当前目录为“~/micropython-1.13/ports/minimal”,运行make命令开始build:

make CROSS=1

又出现了关于python3的报错:

加上“V=1”参数具体看一下哪里调用了python3?


竟然是“~/micropython-1.13/tools/mpy-tool.py"。

删除首行显式指定使用python3的语句,换成“#! /usr/Python38/python”。

重新make一下,终于大功告成。

参考资料

windows搭建gcc开发环境(msys2)
https://blog.csdn/qiuzhiqian1990/article/details/56671839

Micropython开发环境–WIN7-64位下搭建
https://blog.csdn/whble/article/details/84983829

MicroPython windows开发环境搭建–MSYS2+MINGW
https://blog.csdn/allenymlu/article/details/103358904

在后续文章中,将讲述基于NXP LPC55S69-EVK开发板,进行一个最小的micropython的移植,并且使用JLink调试器及相关的软件工具OZone进行下载和调试的过程。

本文标签: 环境 系统 Windows MicroPython