M1 ARMv8版MacOs通过Ubuntu虚拟机搭建edk2的开发环境

M1 MacOs Big Sur 11.11版笔记本从购买以来,一直在探索各种开发环境,作为一个UEFI的爱好者,那么EDK2的开发环境当然首当其冲了。

前沿

作为一个长期发展且走在时代前沿的我们,首先你必须得知道目前的主流架构:

  • ARM
  • X86
  • 外加我们国内自主程度最高,拥有自主指令集架构的LoongArch

无论什么架构没有操作系统及生态也成不了气候,而对于EDK2的开发环境恰恰建立在操作系统的编译环境之上,那么不得不了解各种架构体系以及系统版本下的编译规则了,这样我们才能玩转M1.

按照龙芯胡老师所说,可以很好概括目前世界上的计算机体系:

体系Silicon架构OS版本
WIntelX86Windows
AAArmAndroid

其中M1也离不开其中,它属于Arm的Silicon架构,Os版本是基于Unix开发的MacOs,所以玩转M1就需要知道Arm版本的MacOs下的编译规则,也就是架构中基于GCC,LLVM,golang等整合的编译链了。
在此由于对XCODE不是特别了解,所以我们在MacOs下搭建了一个Ubuntu的虚拟机来搭建EDK2的开发环境,关于如何在M1上搭建Ubuntu虚拟机,见Arm版的M1芯片如何搭建Window虚拟机可知。

EDK2源码下载

UEFI是一个开源项目,相信UEFI工作者们比我了解的还多了,所以在这里我就不多说啦。
EDK2开源社区:https://github.com/tianocore/edk2
源码下载:git clone https://github.com/tianocore/edk2.git
UEFI社区:https://www.uefi.org/ 包含一些UEFI的SPEC规范,没事可以浏览一下。

Build in UEFI code directory

M1芯片是基于ARMv8架构的IP核,所以我们目的是编译出AARCH64架构的二进制,用M1上用qemu模拟出一个小坏境去执行。

EDK2 环境提供了一个专门针对Arm版本的QEMU去调试用的Pkg -> ArmVirtPkg/ArmVirtQemu.dsc在这里插入图片描述

编译此Pkg的步骤及注意事项:

  • 1) source edksetup.sh:主要配置一些环境变量,并将EDK2中BaseTools的Conf文件(build_rule tools_def等)基本EDK2编译环境配置好。
  • 2) export GCC48_AARCH64_PREFIX=$PATH/aarch64-linux-gnu-aarch编译器,这里指的就是本地编译器(非交叉编译),默认M1安装的是GCC9的编译器,在这里EDK2的环境是无法正常编译通过的,所以首先请卸载GCC-9,使用GCC-7编译器,sudo apt remove gcc-9,sudo apt install gcc-7,当你安装好后默认gcc命令即是gcc-7版本的了,这里一定要注意要不然后面就无法执行了。其实EDK2社区推荐我们使用GCC-5。在这里插入图片描述
  • 3) make -C BaseTools :编译EDK2的工具链,GCC-7正常通过(在这里g++也请同样使用g+±7,而非g+±9,在这里像nasm,acpi,uuid-dev等编译组件我就不多少了,相信UEFI的开发者都懂。
  • 4) build -a AARCH64 -t GCC48 -p ArmVirtPkg/ArmVirtQemu.dsc:当你的BaseTools正常编译通过,且GCC48_AARCH64_PREFIX这个环境变量正常指向了AARCH编译器,那我们就可以直接通过此命令来使用ArmVirtQemu来编译运行在QEMU上的AARCH架构的BIOS二进制了,最终生成的fd文件:Build/ArmVirtQemu-AARCH64/DEBUG_GCC48/FV/QEMU_EFI.fd
    现在就已经是活的了,玩转UEFI的人应该比我懂,我就不在关羽面前耍大刀啦,请自行修改参与FD生成的模块及FD二进制的名字吧!

以上UEFI的AARCH架构的二进制就通过本地的AARCH编译器编译出来了,那么我们如何验证一下呢?
这就需要借助QEMU去模拟出一个AARCH’架构的处理器,如果你有开发版的话,请自行编译ArmPkg等,我这里没有,就只能用QEMU去模拟一个了。

QEMU模拟AARCH64

我没有使用现成的QEMU程序,QEMU是一个开源项目,按照源码可以从新编译。

QEMU源码下载:

QEMU社区源码:git clone https://github.com/qemu/qemu.git 请自行git。

QEMU源码编译:

我们最终需要编译出aarch执行的qemu-system-aarch64模拟AARCH64的模拟工具

  • 1 cd qemu-4.1.0
  • 2 ./configure --target-list=aarch64-softmmu
    这步骤可能会报一系列错误,除了缺包还是缺编译工具等…,所以需要耐心一点点排查并从中查找有效的安装包一个个安装,说一下我编译时所需要安装的一系列吧!

sudo apt-get install :

  • libpixman-1-dev
  • pkg-config
  • libglib2.0-dev
  • zlib1g-dev
  • libtool

我只是为我们前进的路上排除了一丁点经验之谈,最终还是已你们本身的环境为主!

QEMU 编译好后会生成一个工具 qemu-system-aarch64
有了模拟器,就可以模拟硬件环境执行我们的UEFI了.

QEMU模拟执行UEFI

工具使用命令: qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -vnc 0.0.0.0:1 -M virt -bios QEMU_EFI.fd -nographic,模拟一个a57的处理器,内存2G,双核,指定我们需要跑的BIOS程序QEMU_EFI.fd, 过多的参数就不详细说了!
执行结果:在这里插入图片描述在这里插入图片描述
其中qemu还可以通过qemu-img create aarm64.img来创建指定文件系统的磁盘以便跑内核等Os镜像。

希望大家多多分享,共同学习, 一代伟人曾说:数风流人物,还看今朝!加油吧,年轻人!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来杯清咖_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值