在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)
安装好ubuntu后,运行就会出现下面的控制台样式窗口,它默认是只有控制台(shell)界面,没有图形化界面。我们可以通过 lsb_release -a 命令查看系统版本。
这个新安装的ubuntu可以看成是一个全新的系统,大部分软件都需要自己安装,先更新软件仓库。
代码: 全选
sudo apt update
代码: 全选
curl -Lo gcc-arm-none-eabi.tar.xz "https://developer.arm.com/XXXXXX"
下载后,先在 /opt 下创建目录
代码: 全选
sudo mkdir /opt/gcc-arm-none-eabi
代码: 全选
sudo rm -rf /opt/gcc-arm-none-eabi
代码: 全选
sudo tar xf gcc-arm-none-eabi.tar.xz --strip-components=1 -C /opt/gcc-arm-none-eabi
代码: 全选
echo 'export PATH=$PATH:/opt/gcc-arm-none-eabi/bin' | sudo tee -a /etc/profile.d/gcc-arm-none-eabi.sh
然后安装git软件:
代码: 全选
sudo apt install git
代码: 全选
sudo apt install gcc make
代码: 全选
cd
mkdir projects
cd projects
git clone https://github.com/micropython/micropython
成功下载后,进入micropython目录,先下载使用到的其它库文件:
代码: 全选
cd micropython
git submodule update --init
下载源码后,就可以开始编译了,首先是编译mpy-cross,它是一个micropython的辅助工具,在编译过程中会用到。
在micropython源码的根目录中,输入下面命令:
代码: 全选
make -C mpy-cross
代码: 全选
make -C ports/stm32
如果是编译其它开发板,就需要在命令行中指定板子的名称,注意BOARD必须大写,等号两边不能有空格:
代码: 全选
make -C ports/stm32 BOARD=STM32F7DISC
以后如果micropython代码更新了,我们就可以通过git同步更新,然后再次编译。
代码: 全选
git pull
代码: 全选
make -C ports/stm32 clean
make -C ports/stm32
代码: 全选
#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的一个程序,比传统用虚拟机方式更加容易使用。缺点是不能选择用户数据存放的目录,所有文件都会保存到系统盘,需要在系统盘留出足够的空间,此外性能比传统虚拟机低。