编译qemu/arm64的uefi

本文介绍如何在Ubuntu 18.04环境下编译适用于ARM64架构QEMU虚拟机的UEFI固件。UEFI作为BIOS的升级版,在QEMU中扮演着重要的角色。文章提供了详细的步骤指导,包括设置开发环境、安装依赖工具、配置编译选项等。

在arm64上启动qemu虚拟机有两种方式,一种是通过-kernel 的方式boot kernel,另一种是先启动uefi再boot kernel。本文记录一下怎么编译qemu/arm64 的uefi。

uefi可以大概理解为bios的升级版。它是一个开放的标准,并没有官方的实现。目前用的比较多的实现是intel开源的https://github.com/tianocore/edk2。这个edk2是一个可以跨平台编译uefi的项目,arm64也是用的这个代码。

编译主要是参照arm的开发者文档:https://developer.arm.com/tools-and-software/open-source-software/firmware/edkii-uefi-firmware/building-edkii-uefi-firmware-for-arm-platforms/set-up-the-development-environment。 我就翻译整理一下。由于编译过程比较繁琐,直接写脚本了。

这个脚本要在ubuntu 18.04 for x86上运行。

mkdir source
cd source
export WORKSPACE=$PWD

git clone https://github.com/tianocore/edk2-platforms.git
git clone https://github.com/acpica/acpica.git
git clone https://github.com/tianocore/edk2.git

cd edk2
git subm
### 使用 QEMU 模拟 ARM64 环境的配置教程 在 Windows 或其他操作系统中使用 QEMU 模拟 ARM64 架构环境,需要完成以下任务:安装必要的工具、下载镜像文件、配置启动参数以及运行虚拟机。以下是详细的说明: #### 1. 安装 QEMU QEMU 是一个开源的机器模拟器和虚拟化程序。首先需要确保系统中已安装 QEMU。对于 Windows 用户,可以从官方站点或可信来源下载预编译的二进制文件[^1]。 - 下载地址:https://qemu.weilnetz.de/w64/ - 解压后将 `qemu-system-aarch64.exe` 所在目录添加到系统的 PATH 环境变量中。 #### 2. 准备 ARM64 的内核和镜像文件 为了启动 ARM64 虚拟机,需要准备以下文件: - **内核文件**(如 `vmlinuz` 或 `Image`) - **设备树文件**(如 `dtb`) - **根文件系统镜像**(如 `rootfs.ext4`) 这些文件可以从 Linaro 官方发布页面获取[^1]。 - 内核和 dtb 文件地址:https://releases.linaro.org/components/kernel/uefi-linaro/16.02/release/qemu64/ - 根文件系统镜像可以使用 Ubuntu 提供的 ARM64 版本。 #### 3. 配置 QEMU 启动参数 启动 QEMU 的命令行参数包括指定架构、CPU 类型、内存大小、处理器核心数、内核路径等。以下是一个典型的命令示例[^2]: ```bash qemu-system-aarch64 \ -machine virt \ -cpu cortex-a57 \ -nographic \ -m 2048 \ -smp 2 \ -kernel <path_to_kernel>/Image \ -initrd <path_to_initrd>/initrd.img \ -drive if=none,file=<path_to_rootfs>/rootfs.ext4,id=hd0 \ -device virtio-blk-device,drive=hd0,bus=virtio-mmio-bus.0 \ -append "root=/dev/vda console=ttyAMA0" ``` - `-machine virt`:指定虚拟机类型为 `virt`,这是 QEMU 支持的标准 ARM64 平台。 - `-cpu cortex-a57`:指定 CPU 类型为 Cortex-A57。 - `-nographic`:禁用图形界面,使用纯文本模式。 - `-m 2048`:分配 2GB 内存。 - `-smp 2`:设置虚拟机的核心数为 2。 - `-kernel` 和 `-initrd`:分别指定内核和初始 RAM 磁盘路径。 - `-drive`:定义根文件系统镜像及其挂载方式。 - `-append`:传递启动参数给内核,例如指定根文件系统位置和控制台输出。 #### 4. 测试虚拟机 运行上述命令后,QEMU 将加载指定的内核并启动虚拟机。如果一切正常,可以看到内核启动日志,并最终进入 Linux 命令行界面。 #### 5. 制作根文件系统 如果需要自定义根文件系统,可以参考 BusyBox 的方法创建最小化的 Linux 系统[^3]: 1. 下载并编译 BusyBox。 2. 创建根目录结构并复制 BusyBox 可执行文件。 3. 使用 `mkfs.ext4` 工具生成根文件系统镜像。 #### 注意事项 - 如果遇到错误信息如 `make: arm-linux-gnueabihf-gcc: Command not found`,说明缺少交叉编译工具链。可以通过安装 `gcc-arm-linux-gnueabihf` 或其他相关工具链解决。 - 确保所有路径正确无误,并检查文件权限。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值