• 06 在MSYS2中编译树莓派裸机程序,并在QEMU中运行


    作者将狼才鲸
    创建日期2022-11-14

    4)完整的环境安装步骤

    • 写在前面,我会提供已经安装好各种工具的MSYS2环境,如果你没用过Linux,建议你直接下载本系统压缩包cj_msys64.zip,解压后使用,或者自行使用VMware Player虚拟机+Ubuntu安装开发环境,因为MSYS2中安装软件的教程很难快速找到,需要有一些使用Linux的经验才知道怎么安装特定软件;我的MSYS2环境添加了32位和64位的交叉编译工具,他们的来源不一样,后面会详述。

    • 下面是从头到尾的工具软件安装步骤:

      • 推荐使用MSYS2 + 已经用MinGW32或MinGW64编译好的程序,基本上开发过程中你能在Linux下实现的,也都能在这个环境下实现,只是有些教程没有Ubuntu下那么好找;在MSYS2中不能使用Linux的程序,必须用MinGW将源码重新编译过后才能使用,这一般是软件供应商已经做好的。
      • MSYS2的更多信息详见本仓库子文档《04_MSYS2简述.md》
    表2 MSYS2、MinGW和Cygwin的关系
    软件名版本作用特点
    MSYSMSYS,MSYS2Linux命令行终端:Shell,Bash没有在Windows下编译Linux程序的工具集,会自带已经被MinGW编译好的一些包;脱胎于Cygwin,但容量更小;MSYS2是因为MSYS常年不更新而新组的的一个项目;MSYS2安装完后的文件名为msys64,你可以将你安装好之后的msys64文件夹打包发给别人,这样别人无安装就可以用了,只是容量有点大,几十G
    MinGWMinGW32,MinGW64一组编译工具链编译后生成的是纯粹的Windows程序;它自带的命令行终端很难用也不全,要和MSYS2终端配合使用;MinGW64是因为MinGW32常年不更新而新组的的一个项目
    CygwinCygwin编译工具+命令行有模拟层,将Linux API转成Windows API再执行程序,效率低,容量大,速度慢,2010年左右在Windows下搭建交叉编译环境时还多用它;要运行纯粹的Linux程序时也用它
    4.1 安装MSYS2
    1. 我当前下载的版本是msys2-x86_64-20221028.exe
    1. 我将软件安装在D盘根目录,软件会安装在d:\msys64中,安装目录不能有空格、中文。
    2. 安装完之后先不打开软件,先将国外镜像地址换成国内镜像地址,参考上方教程。
    3. 电脑配置环境变量,在PATH中增加一行D:\msys64\usr\bin
    1. 双击运行主目录下的msys2.exe或者mingw64.exe都可以,其它的exe有些是32位的,有些是非gcc编译器对应的软件。
    4.2 MSYS2中安装QEMU
    • 因为我已经有了MSYS2环境,可以在里面直接安装QEMU;你下载Windows版本的QEMU单独安装,也是走的MSYS2+MinGW这一套,只是和Git一样,它们都是在自己的软件安装包自带了精简版的MinGW环境。

    • 我们不需要用MinGW64或者MinGW32编译QEMU,我们只安装已经编译好的QEMU软件;网上没搜到MSYS2中安装QEMU的教程,但是我们知道MSYS2中的所有软件都在packages.msys2.org/reposMSYS2 Base PackagesMSYS2 Packages中有描述。

    • 在https://packages.msys2.org/base 中能找到mingw-w64-qemu;在https://packages.msys2.org/package/ 中能找到mingw-w64-x86_64-qemu;在https://packages.msys2.org/package/mingw-w64-x86_64-qemu?repo=mingw64 中能找到/mingw64/bin/qemu-system-aarch64.exe、/mingw64/bin/qemu-system-arm.exe,也能找到安装方法:pacman -S mingw-w64-x86_64-qemu;我当前使用的是Build Date: 2022-10-10 20:19:53,Installed Size: 768.72 MB,实际安装完后有2G。

    • 查看是否安装成功:进入cd /mingw64/bin/ 然后./qemu-system-arm.exe --version查看版本号;后续还需要设置环境变量,这里暂略。

    • 能看到输出信息:

    jim@DESKTOP-SVP3BEM MSYS /mingw64/bin
    $ ./qemu-system-arm.exe --version
    QEMU emulator version 7.1.0
    Copyright (c) 2003-2022 Fabrice Bellard and the QEMU Project developers
    
    • 1
    • 2
    • 3
    • 4
    4.3 MSYS2中安装32位和64位ARM交叉编译工具
    4.4 用现成的程序从QEMU运行树莓派
    • 从以下网址https://gitee.com/mirrors_bztsrc/raspi3-tutorial/tree/master/0A_pcscreenfont 下载编译好的树莓派程序,我已下载好,存放在msys64家目录下的1_raspi/01_run文件夹中
    • 使用命令运行:/mingw64/bin/qemu-system-aarch64 -M raspi3b -kernel ~/1_raspi/01_run/kernel8.img -d in_asm
    • 能看到出现了QEMU窗口,并显示了hello world。
      效果如下:在这里插入图片描述
    4.5 交叉编译工具编译程序,并在树莓派QEMU模拟中运行
    1. mirrors_bztsrc/raspi3-tutorial下载一个国外的英文仓库,是演示64位ARM树莓派裸机编程的,我借鉴这里面的工程。
    • 这个工程已下载到当前仓库根目录下,我也会将这个目录拷贝到msys64的家目录下,我会将里面的Makefile和自动运行改成和msys64适配,保证一个make命令就能编译程序,一个make run就能在QEMU中运行刚刚编译的程序。
    • 输出qemu所在位置和aarch64编译器所在位置的环境变量,这样就不用每次都写完整的路径了。
    • 打开家目录也就是msys64/home/jim/下的.bashrc,在里面末尾加上
      export PATH= P A T H : / m i n g w 64 / b i n e x p o r t P A T H = PATH:/mingw64/bin export PATH= PATH:/mingw64/binexportPATH=PATH:/mingw32/bin/gcc-linaro-7.5.0-2019.12-i686-mingw32_aarch64-linux-gnu/bin
    • 生效配置 source .bashrc
    • 查看环境变量 echo $PATH,确认已经生效
    1. 进入msys64 raspi3-tutorial源码目录,编译并运行
  • 相关阅读:
    利用文本结构知识增强预训练模型的问题生成
    关于stm32f10xRB系列的PB5和PB12外设冲突问题
    Proteus中单片机IO口外接LED输出低电平时,引脚却一直保持高电平的问题(已解决)
    MybatisPlus核心功能——实现CRUD增删改查操作 (包含条件构造器)
    《算法导论》学习(十五)----二叉搜索树(C语言)
    【LeetCode】672. 灯泡开关 Ⅱ
    建木v2.5.7发布
    MATLAB数组
    哪款蓝牙耳机接电话好?接打电话的蓝牙耳机推荐
    基于matlab的网络LEACH协议性能仿真
  • 原文地址:https://blog.csdn.net/qq582880551/article/details/127892423