作者 将狼才鲸
创建日期 2022-11-14
  • Gitee源码和工程地址:才鲸嵌入式 / 开源安防摄像机(嵌入式软件)
    CSDN文章地址:项目介绍:开源安防摄像机(嵌入式软件)

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的关系

软件名 版本 作用 特点
MSYS MSYS,MSYS2 Linux命令行终端:Shell,Bash 没有在Windows下编译Linux程序的工具集,会自带已经被MinGW编译好的一些包;脱胎于Cygwin,但容量更小;MSYS2是因为MSYS常年不更新而新组的的一个项目;MSYS2安装完后的文件名为msys64,你可以将你安装好之后的msys64文件夹打包发给别人,这样别人无安装就可以用了,只是容量有点大,几十G
MinGW MinGW32,MinGW64 一组编译工具链 编译后生成的是纯粹的Windows程序;它自带的命令行终端很难用也不全,要和MSYS2终端配合使用;MinGW64是因为MinGW32常年不更新而新组的的一个项目
Cygwin Cygwin 编译工具+命令行 有模拟层,将Linux API转成Windows API再执行程序,效率低,容量大,速度慢,2010年左右在Windows下搭建交叉编译环境时还多用它;要运行纯粹的Linux程序时也用它
  • 参考网址:

    • CygWin、MingW、MSYS之间的关系
    • Cygwin、Msys、MinGW、Msys2的区别与联系(转)
    • Cygwin、MinGw、mingw-w64,MSys msys2区别与联系
    • MSYS2+MinGW32 编译 QEMU需做的准备工作
    • 在Windows上编译QEMU

4.1 安装MSYS2

  1. 我当前下载的版本是msys2-x86_64-20221028.exe
  • 网上的安装教程是使用msys2打造优雅的开发环境
  • 在官网主页找到下载链接:github.com/msys2/msys2-installer/releases/download/2022-10-28/msys2-x86_64-20221028.exe ,85M左右,这只是一个安装器,不是全部的软件;这是GitHub的地址,有时候下载慢,有时候无法访问;这个可下载的软件是CICD自动生成的,国内的Gitee镜像中也没有这个下载包;但你也可以在网上其它的地方比如网盘之类的找到这个文件的下载。
  1. 我将软件安装在D盘根目录,软件会安装在d:\msys64中,安装目录不能有空格、中文。
  2. 安装完之后先不打开软件,先将国外镜像地址换成国内镜像地址,参考上方教程。
  3. 电脑配置环境变量,在PATH中增加一行D:\msys64\usr\bin
  • win10环境变量怎么设置 win10设置环境变量的方法
  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/repos 、 MSYS2 Base Packages 和 MSYS2 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

4.3 MSYS2中安装32位和64位ARM交叉编译工具

  • 一些工具介绍:

    • 树莓派提供了在Linux下使用的交叉工具包的文件夹名为gcc-linaro-arm-linux-gnueabihf-raspbian-x64,使用的编译器名为arm-linux-gnueabihf-gcc,下载地址raspberrypi-tools/ arm-bcm2708。
    • GNU官方提供了树莓派在Windows中使用的交叉工具包,默认的工具是使用Visual Studio + VisualGDB来进行编译的。
      32位地址:Prebuilt Windows Toolchain for Raspberry Pi
      64位地址:Prebuilt Windows Toolchain for Raspberry Pi (64-bit)
    • ARM在Windows下自带的交叉编译工具为gcc-arm-none-eabi-10.3-2021.10-win32.exe,网页路径在https://developer.arm.com/downloads/-/gnu-rm ,交叉编译工具名为arm-none-eabi-gcc,我们不使用树莓派自带的交叉编译工具,而直接使用ARM的;因为树莓派没有直接给出MinGW下的交叉编译工具,而我也不想在Cygwin环境使用树莓派的Linux交叉编译工具。
  • 但也不在ARM官方下载,我们在MSYS2中同样也能找到:在https://packages.msys2.org/base 中能搜到mingw-w64-arm-none-eabi-gcc和mingw-w64-arm-none-eabi-gdb

    • MSYS2下载命令 pacman -S mingw-w64-x86_64-arm-none-eabi-gcc,大小有1.24 GB,参考网址:Package: mingw-w64-x86_64-arm-none-eabi-gcc
    • GDB调试工具下载的命令 pacman -S mingw-w64-x86_64-arm-none-eabi-gdb,大小有7.92 MB,参考网址:Package: mingw-w64-x86_64-arm-none-eabi-gdb
    • 安装完成后的文件在msys64/mingw64/bin/arm-none-eabi-gcc.exe
    • 如果你需要使用aarch64-elf-gcc编译64位的ARM程序,在新版的树莓派中运行,则MSYS2网站中没有,你要去Linaro软件中下载。
  • 如果有需要,你也可以安装用于64位ARM的交叉编译工具。

    • 软件名称:gcc-linaro-7.5.0-2019.12-i686-mingw32_aarch64-linux-gnu.tar.xz ,大小364M
    • 下载路径:https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/
    • 下载完之后放到msys64/mingw32/bin/里面去,用Linux命令解压,然后设置环境变量,使用方法和32位gcc交叉编译工具一样
    • 我msys64中的路径是msys64/mingw32/bin/gcc-linaro-7.5.0-2019.12-i686-mingw32_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc.exe
    • 在Linaro这里也能下到32位的GCC交叉编译工具:gcc-linaro-7.5.0-2019.12-i686-mingw32_arm-linux-gnueabihf.tar.xz
    • https://www.linaro.org/ Linaro公司主要是做ARM的一些开源工具,树莓派也是直接使用的Linaro编译器。
  • MSYS2安装make

    • pacman -S make
    • Package: make
  • 参考网址:

    • Windows下编译树莓派pico C\C++(Building on MS Windows)
    • 树莓派 交叉编译环境搭建(Win 7)
    • 【交叉编译踩坑指北(二)】windows10下VScode构建树莓派pico开发环境(C/C++)
    • 树莓派2 raspyberry Pi2 交叉编译app
    • Windows10下 交叉编译aarch64(ARMv8)架构Qt5.12.11库

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源码目录,编译并运行
  • 源码我已经拷贝到msys64中,并且已经改了Makefile,能直接编译和运行,同时修改过以后的源码我也会在本仓重上传

  • 源码路径 ~/raspi3-tutorial/01_bareminimum,也就是/home/jim/raspi3-tutorial/01_bareminimum,也就是D:\msys64\home\jim\raspi3-tutorial\01_bareminimum,后面所有的示例路径我都采用第一种写法。

  • 进入目录 cd ~/raspi3-tutorial/01_bareminimum

  • 编译 make

  • 运行 make run

  • make run能运行,是因为在Makefile里面写了命令 qemu-system-aarch64 -M raspi3b -kernel kernel8.img -d in_asm

  • 01_bareminimum用例是一个空程序,所以QEMU里面什么都不会显示,其它用例的效果我会再后面展示。

  • 参考网址:

  • 树莓派有关裸机编程的教程很少,我只找到了几个英文教程和几篇中文博客:

    • 裸机编程:mirrors_bztsrc / raspi3-tutorial
    • 编写操作系统:lxjj / rpi4-osdev
    • 一点中文翻译,在树莓派4B上编写裸机操作系统(PART0)
    • 另一个树莓派操作系统开发:Baking Pi – Operating Systems Development
    • RPi bring up hello world! 树莓派底层编程裸机点亮led
    • 996refuse/emperorOS Public
    • 4 anbox 树莓派 树莓派4裸机基础教程:从hello world开始
    • Raspberry PI 系列 —— 裸机点亮LED灯
  • 参考网址:

  • 树莓派的交叉编译 (BCM2835/6/7/BCM23711)

06 在MSYS2中编译树莓派裸机程序,并在QEMU中运行相关推荐

  1. 在不同的环境中编译hello world程序

    (一)在DOS命令行中编译hello world程序 单击开始 在搜索框中输入cmd 选择cmd.exe 打开命令行窗口 编译hello world 在命令行窗口中输入 echo hello worl ...

  2. VS中编译64位程序以及遇到的问题(E0000235)

    安装64位操作系统不是编译64位程序的必要条件,关键是要装64位程序的编译器. 1. 选择"Build" – "Configuration Manager"菜单 ...

  3. linux中编译C语言程序

    1.首先安装gcc编辑器 yum install gcc* -y 2.编写C语言程序 [root@test ~]# vim aa.c #include<stdio.h> int main( ...

  4. c 语言如何处理表格文件中的数据库,C#程序从Excel表格中读取数据并进行处理

    今天做了一个Excel表格数据处理的事情,因为数据量表较大(接近7000条)所以处理起来有点麻烦,于是写了一个程序, 先将程序记下以便将来查找. using System; using System. ...

  5. java句子中找单词_java程序找到一个句子中每个单词的字母数

    我想找到一个句子中每个单词的字母数.我已经尝试了几次使用几个代码,但从来没有得到它.我总是显示错误StringIndexOutOfBounds异常.我的一个代码如下:java程序找到一个句子中每个单词 ...

  6. Windows中添加自己的程序到开机启动中(添加服务,添加注册表)

    在系统启动的时候启动自己想要启动的程序: 方法一:利用开机启动文件夹 将exe文件或exe文件的快捷方式复制到(启动)文件夹下 以win7为例:开始→所有程序→启动→鼠标右键打开 方法二:添加系统服务 ...

  7. WSL2编译IMX6ULL裸机程序Win10通过Win32DiskImager烧录SD卡

    1. 修改imxdownload.c文件 完整代码见附录 gcc mixbin.c -o mixbin 使用上述gcc命令编译生成mixbin可执行文件,该文件只用于在WSL2下生成load.imx. ...

  8. linux编译文件 no such,Linux中编译或安装程序时提示No such file or directory

    linux find命令 Linux中find常见用法示例 ·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} ...

  9. linux 编译c文件 arm,用arm-linux-gcc编译arm裸机程序(可调用库)

    CC=arm-linux-gcc      #换成arm-elf-gcc不行,可以生成flat格式的文件,但我不知道怎么转成binary LD=arm-linux-ld OBJCOPY=arm-lin ...

最新文章

  1. 题目1493:公约数
  2. swoole-co-pool v1.0.1,Swoole 协程工作池
  3. 2016012075 谢月月 散列函数的应用及其安全性
  4. Java客户端操作elasticsearch--添加文档
  5. 三道题就能考察你对Vue掌握了多少!
  6. webservice 参数太大_webservice大数据
  7. 超全面超详细的Linux学习入门系列教程
  8. SNMP学习笔记之SNMP TRAP简介、流程以及使用Python实现接受Trap信息
  9. 自备一个刷BIOS神器
  10. Arduino AT24C02详解读写地址位
  11. GroupBox与Panel控件
  12. 精选16款超精美的XP登录界面下载
  13. 如何做好一个APP开发项目?需要规避以下误区
  14. 黑客丛林通关攻略参考(更新中)
  15. 一门课程学习转录组调控分析和R可视化第十四期 (线上线下开课)
  16. css 控制 段落 超出三行的部分显示...
  17. 在英特尔独立显卡上训练ResNet PyTorch模型
  18. 多用途DF无线数据收发模块
  19. 原生jq下载文件的方式
  20. UEFI应用与编程--SMM(一)

热门文章

  1. vulnhub--Leeroy:1
  2. Java开发中解析word文档录入数据库——后续
  3. 上海交通大学计算机系张伟楠,重点实验室系列学术报告:上海交通大学张伟楠...
  4. 面试之-3.0概率质量函数,概率密度函数,概率分布函数
  5. 关于vsCode中文插件突然无效的解决办法
  6. Unable to make field private final java.lang.String java.io.File.path accessible: module java.base d
  7. vue+element密码和确认密码校验以及隐藏显示密码的小眼睛
  8. Python画图如何显示各点横纵坐标(x, y)?
  9. 微信浏览器的rem使用填坑
  10. zbrush导入obj模型不显示_zbrush软件怎么导入obj格式文件?Zbrush2018教程在哪可以看?...