QEMU:为什么ARM ISO镜像需要pflash/bios,但不需要X86 ISO镜像

问题描述 投票:0回答:1

我正在尝试从 QEMU 中的 alpine Linux 映像创建两个虚拟机。一个用于 X86,一个用于 ARM64。

对于X86

qemu-system-x86_64 \
-m 512 \
-hda alpine_x86.qcow2 \
-cdrom path/to/img.iso \
-boot d

对于ARM64

qemu-system-aarch64 \
-M virt \
-cpu cortex-a57 \
-m 2048 \
-hda alpine_arm.qcow2 \
-cdrom path/to/img.iso \
-drive if=pflash,format=raw,file=flash.img \ <--------- ?
-nographic

比较两个流程,在X86流程中指定

-cdrom
就足够了。但在 ARM64 情况下,我需要指定
pflash
选项。

我使用

file
检查了 ARM64 映像,它显示可启动。

file alpine-standard-3.20.1-aarch64.iso 
alpine-standard-3.20.1-aarch64.iso: ISO 9660 CD-ROM filesystem data (DOS/MBR boot sector) 'alpine-std 3.20.1 aarch64' (bootable)

但是,如果我不指定 pflash,QEMU ARM VM 不会出现。这是 QEMU 限制还是背后的技术原因?

arm qemu
1个回答
0
投票

事实上,x86 和 aarch64 VM 都需要 BIOS 才能从 CDROM ISO 映像启动。区别只是 x86 PC 机器类型将默认启动 BIOS,即使您没有明确要求 BIOS,而 AArch64 virt 机器类型默认没有 BIOS,您必须明确要求一个。

这主要是出于历史原因,无论是在 QEMU 内还是更普遍的两种架构中:

  • x86 PC 真实硬件始终具有 BIOS,并且它执行大量工作,Linux 和其他来宾认为这些工作已经发生;所以很少有客人可以在没有 BIOS 的情况下启动
  • 另一方面,arm 历来更倾向于要求 Linux 来配置硬件,而不是依赖固件来完成此操作;所以在没有固件的情况下启动内核所需的工作量非常小
  • 当虚拟机首次添加到 QEMU 时,没有方便可用的 UEFI 固件可用作 BIOS,大多数开发人员习惯直接启动没有固件的内核;所以默认设置为“无 BIOS”
© www.soinside.com 2019 - 2024. All rights reserved.