文章目录
前言
我们计划使用QEMU模拟Cortex-A57处理器来运行TF-A。
QEMU是一个免费开源的模拟器,可以模拟各种不同的处理器架构。
TF-A(Trusted Firmware-A)是用于ARMv8-A处理器开发的一个开放源码的参考实现,不同的芯片厂商会根据它进行二次开发,以实现芯片的安全启动和运行。
本文记录了qemu安装过程,作为使用 QEMU 调试 TF-A系列博文的第一篇。
在下一篇博文里(《使用 QEMU 调试 TF-A开发环境建立(使用 QEMU 调试 TF-A (Trusted Firmware-A) 之二)》)我们将演示如何建立一个开发环境,用来使用QEMU模拟Cortex-A57
处理器运行和调试TF-A。
1、qemu安装准备
1.1 我的系统环境
- 宿主机:使用 Intel 处理器的 Windows 10 电脑。
- 虚拟机:在 VMware Workstation 中安装了 Ubuntu 20.04。
1.2 QEMU 调试 TF-A系统环境配置。
在 Ubuntu 虚拟机上运行 QEMU 时,需要确保虚拟机具有足够的资源和配置以满足 QEMU 调试 TF-A系统需求。以下是我们的环境配置。
- CPU:虚拟机应具有至少 1 个(建议 2 个或更多)虚拟 CPU 核心,以便在运行 QEMU 时获得良好的性能。
- 内存:分配给虚拟机的内存取决于要在 QEMU 中运行的模拟环境。建议分配至少 2 GB 的内存给虚拟机,如果要运行资源密集型的模拟环境,可能需要更多内存。
- 存储空间:确保虚拟机具有足够的存储空间以容纳 QEMU 的安装、虚拟磁盘映像和其他相关文件。建议预留至少 10-20 GB 的存储空间。
- 网络:虚拟机应具有正常的网络连接,以便在需要时下载 QEMU 和其他相关软件包。
- 嵌套虚拟化:宿主机上运行的虚拟机中使用 QEMU/KVM(即在 Ubuntu 虚拟机上运行),那么需要嵌套虚拟化。这是因为,Ubuntu 虚拟机将成为第二层虚拟化,而 QEMU/KVM 将在这个虚拟机中利用宿主机处理器的虚拟化扩展。
- 模拟物理板卡:使用ARM FVP基板(Fixed Virtual Platform)作为QEMU-System-Arm的物理板卡。
1.3 检查系统环境是否支持嵌套虚拟化
要检查系统环境是否支持嵌套虚拟化,按照以下步骤操作:
-
首先,确认宿主机处理器支持虚拟化。对于 Intel 处理器,是 VT-x 技术;对于 AMD 处理器,是 AMD-V 技术。可以查看处理器规格或访问制造商的官方网站,以确认处理器是否支持虚拟化技术。
-
确保宿主机 BIOS/UEFI 设置已启用虚拟化支持。需要重启计算机并进入 BIOS/UEFI 设置,在其中找到虚拟化相关设置(通常在高级设置或 CPU 配置中),然后启用该功能。具体设置方法因计算机和 BIOS/UEFI 版本而异,请参考计算机或主板说明书以获得详细信息。
-
在宿主机操作系统上检查嵌套虚拟化是否已启用。对于 Windows 10,打开 PowerShell 或命令提示符,输入以下命令:
systeminfo
在输出中查找“Hyper-V 要求:”,在输出的结果中,查找以下行:
Hyper-V Requirements: VM Monitor Mode Extensions: Yes Virtualization Enabled In Firmware: Yes Second Level Address Translation: Yes Data Execution Prevention Available: Yes
或者
Hyper-V 要求: 虚拟机监视器模式扩展: 是
固件中已启用虚拟化: 是
二级地址转换: 是
数据执行保护可用: 是
如果所有这些项目都标有 “Yes”,那么 Intel 处理器支持嵌套虚拟化。
-
检查虚拟机软件是否支持嵌套虚拟化。我们使用的是 VMware Workstation,它是支持嵌套虚拟化的。确保已在虚拟机设置中启用了嵌套虚拟化。可以在虚拟机设置的“处理器”或“CPU”部分找到,其中将允许启用或禁用嵌套虚拟化选项设置为启用。- 在虚拟机的操作系统(如 Ubuntu)中检查嵌套虚拟化是否可用。打开终端并输入以下命令:
对于 Intel 处理器:egrep -c '(vmx)' /proc/cpuinfo
-
对于 AMD 处理器:
egrep -c '(svm)' /proc/cpuinfo
如果输出结果大于 0,表示嵌套虚拟化已在 Ubuntu 虚拟机上启用。完成以上步骤后,可以确认系统环境是否支持嵌套虚拟化。
2 安装 QEMU
在我的系统环境中,按照以下步骤在 Ubuntu 20.04 虚拟机上安装 QEMU:
- 打开 Ubuntu 20.04 虚拟机。
- 打开终端(Terminal)。
- 更新系统软件包列表:
sudo apt update
- 安装 QEMU 及其相关工具包:
sudo apt install qemu qemu-kvm libvirt-daemon libvirt-clients bridge-utils virt-manager
这将安装 QEMU 模拟器、KVM 模块、libvirt 虚拟化管理库、虚拟网络管理工具以及 Virt-Manager 图形化管理工具。
- 安装完成后,验证 QEMU 安装是否成功:
qemu-system-x86_64 --version QEMU emulator version 2.11.1(Debian 1:2.11+dfsg-1ubuntu7.41) Copyright (c) 2003-2017 Fabrice Bellard and the QEMU Project developers
3 安装QEMU-System-Arm
QEMU(Quick Emulator)是一个开源的处理器模拟器和虚拟化软件。它支持多种处理器架构,包括x86、x86_64、ARM、MIPS、PowerPC等。qemu-system-arm是QEMU的一个子项目,专门用于模拟ARM架构的处理器。它可以让您在非ARM硬件(例如x86或x86_64处理器)上运行ARM代码,非常适合开发、调试以及测试ARM程序。
qemu-system-arm的主要特点如下:
处理器架构支持:qemu-system-arm支持多种ARM处理器架构,包括ARMv7、ARMv8(AArch64)等。这使得开发者能够在一个统一的平台上进行针对不同ARM处理器的开发和调试。
设备模拟:qemu-system-arm不仅可以模拟处理器,还可以模拟一定数量的外围设备,如串行端口、网络接口、图形显示等。这使得开发者能够更好地进行系统级的开发和测试。
可扩展性:qemu-system-arm具有很好的可扩展性,用户可以根据需要添加新的设备模型和处理器架构。这使得qemu-system-arm能够适应不断发展的ARM生态系统。
跨平台:QEMU本身是跨平台的,可以在多种操作系统上运行,包括Linux、macOS和Windows。这使得开发者可以在自己熟悉的操作系统环境中进行ARM开发和调试。
与调试器集成:qemu-system-arm可以与常见的调试器(如gdb)集成,从而方便用户对代码进行调试。通过使用QEMU的远程调试功能,开发者可以在宿主机上运行调试器,而在QEMU虚拟机上运行被调试的代码。
在Ubuntu虚拟机中安装qemu-system-arm,使用以下命令安装:
sudo apt-get update
sudo apt-get install qemu-system-arm
通过以下的指令,可以查看QEMU支持的处理器列表:
qemu-system-aarch64 -M virt -cpu help
Available CPUs:
arm1026
arm1136
arm1136-r2
arm1176
arm11mpcore
arm926
arm946
cortex-a15
cortex-a53
cortex-a57
cortex-a7
cortex-a8
cortex-a9
cortex-m3
cortex-m4
cortex-r5
pxa250
pxa255
pxa260
pxa261
pxa262
pxa270-a0
pxa270-a1
pxa270
pxa270-b0
pxa270-b1
pxa270-c0
pxa270-c5
sa1100
sa1110
ti925t
如果在列表中未能找到需要的处理器,可以尝试升级QEMU以获取对需要的cpu的支持。命令如下:
sudo apt-get update
sudo apt-get upgrade qemu-system-arm
4 qemu-system-aarch64 和 qemu-system-arm
qemu-system-aarch64 和 qemu-system-arm 都是 QEMU(Quick Emulator)项目的一部分,用于仿真 ARM 架构的处理器。尽管它们都是为 ARM 设计的,但它们之间有一些关键区别:
目标架构:
qemu-system-aarch64 专为 ARMv8-A 架构(64 位)设计,支持 AArch64(ARM 64 位)指令集。
qemu-system-arm 则主要针对 ARMv7(以及部分 ARMv6 和 ARMv5)架构(32 位),支持 ARM、Thumb、Thumb-2 等指令集。
设备仿真:
两者都支持不同的系统设备仿真,但由于它们针对的架构不同,因此支持的设备类型也有所不同。例如,qemu-system-aarch64 支持的一些开发板和设备包括 Raspberry Pi 3,Xilinx Versal等,而 qemu-system-arm 支持的设备包括 Raspberry Pi 2,Versatile Express等。
应用场景:
如果你需要在 ARMv8-A(64 位)环境下进行开发、测试或调试,那么应使用 qemu-system-aarch64。
如果你需要在 ARMv7(32 位)环境下进行开发、测试或调试,那么应使用 qemu-system-arm。
总之,qemu-system-aarch64 和 qemu-system-arm 都是 QEMU 项目的一部分,分别用于仿真 64 位和 32 位的 ARM 架构处理器。根据你的需求和目标硬件平台,你可以选择适当的工具进行仿真。