QEMU支持基于OVMF的UEFI引导。
本文主要先梳理下UEFI、EDK II、OVMF firmware这几个名词之间的关系:
关系如下图
UEFI:其全称Unified Extensible Firmware Interface(通用可扩展固件接口),是一个规范,该规范定义了操作系统和固件(即实现具体功能的程序)之间接口的实现准则(UEFI是规定的操作系统和固件间的接口,不是操作系统与硬件间的接口)。UEFI 提供了一个接口标准,以便在硬件发生变更时固件能提供足够信息而保证操作系统不受影响。它包含有芯片组和外设芯片驱动程序,并通过系统表提供引导时服务和运行时服务。UEFI的前身是Intel开发的可扩展固件接口(EFI)。Intel后来将EFI的所有权交给了一个非营利性组织UEFI论坛,该论坛现在负责UEFI的开发和推广工作。
UEFI规范官网:
www.uefi.org
EDK II:EDK II是遵循UEFI规范实现的一个开源项目,EDK的全称是EFI Developer Kit,开发者可以在此基础上开发UEFI下的设备驱动或者其它应用。它可以支持所有类型的CPU(X86架构、RRM架构等)。EDK II代码包含着平台通用的代码,不会提供特定外围设备(USB控制器、SATA控制器、音频控制器)驱动程序等相关代码。Intel为了解决使用EDK所暴露的问题启动了EDK II项目,它着重于如何让客户轻松编写特定类型的模块,将模块移植到平台上或重新定制。
EDK II代码仓库:
https ://github.com/tianocore/edk2
OVMF:其全称Open Virtual Machine Firmware(开放虚拟机固件),是一个基于EDK II的项目,用于启用对虚拟机的UEFI支持。OVMF包含了与虚拟机相关的库和驱动程序以及在开源VMM上实现支持UEFI的完整固件。
OVMF官网:
https://github.com/tianocore/tianocore.github.io/wiki/OVMF
OVMF代码仓库:
https ://github.com/tianocore/edk2/tree/master/OvmfPkg