OVMF-CentOS使用ovmf作为qemu的uefi启动虚拟机

210次阅读
没有评论

共计 2202 个字符,预计需要花费 6 分钟才能阅读完成。

CentOS使用ovmf作为qemu的uefi启动虚拟机

介绍

我们通常使用QEMU启动虚拟机都是使用SeaBIOS,这是一种BIOS的开源实现,UEFI作为BIOS的发展,那有没有UEFI的呢?答案是有-那就是OVMF。

chatgpt:OVMF是一种UEFI(统一固件接口)实现,它是一个用于在虚拟环境中运行EFI(可扩展固件接口)固件的开源项目。OVMF被广泛用于虚拟机监视器(例如QEMU)中,以提供更现代和灵活的UEFI固件支持,以代替传统的BIOS。OVMF源代码托管在GitHub上,由EDK II(UEFI开发工具包)维护和开发。OVMF支持多种虚拟化平台,包括QEMU、VirtualBox、VMware和Xen等。如果您需要在虚拟环境中运行UEFI固件,可以考虑使用OVMF。

OVMF:官方仓库:https://github.com/tianocore/edk2

下载源码

yum install make gcc uuid-devel g++ git
yum install libuuid-devel
yum install nasm -y
yum install acpica-tools

因为我用的是CentOS7.6,默认安装的版本gcc版本是4.8.5,目前edk2仓库中最新的版本编译存在一定的问题,因此我选择了tag分支中的202008的。

git clone https://github.com/tianocore/edk2.git
cd edk2
# 查看远端tag
git ls-remote --tags
# 切换到远端tag,并新建本地分支命名202008
git checkout tags/edk2-stable202008 -b 202008
# 本地checkout
git checkout 202008
# 更新子模块
git submodule update --init

环境准备

1、准备环境

# 编译工具包
make -C BaseTools
# edk2根目录下设置环境脚本
source ./edksetup.sh

该脚本运行后,会在Conf/目录下生成target.txt配置文件,该文件对应了要生成的UEFI的目标平台架构、构建toolschain版本。

2、修改Conf/target.txt文件

vim Conf/target.txt

官方举例:Example: Conf/target.txt values to build x64 UEFI image for OVMF using GCC5 compiler:

ACTIVE_PLATFORM       = OvmfPkg/OvmfPkgX64.dsc
TARGET_ARCH           = X64
TOOL_CHAIN_TAG        = GCC5

我们的运行目标架构是x86,gcc4.8 做如下修改,文件其他内容保持不变。

ACTIVE_PLATFORM       = OvmfPkg/OvmfPkgX64.dsc
TARGET_ARCH           = X64
TOOL_CHAIN_TAG        = GCC48

在Conf/tools_def.txt里,有EdkII支持的所有toolchain的详细信息。每个toolchain由一个关键字表示,比如VS2015, GCC45, CLANG38等,TOOL_CHAIN_TAG的赋值只能是这些关键字中的一个。如果开发者需要支持一个新的toolchain,则至少需要修改BaseTools/Conf里的build_rule.template和tools_def.template,他们会在edksetup步骤中被复制到Conf目录。

目前EdkII支持的GCC版本从4.4到5.x,对应的toolchain关键字是GCC44, GCC45, … GCC5。实例平台Ubuntu 14.04所带gcc版本为4.8,所以TOOL_CHAIN_TAG选择GCC48。

在target.txt设置好构建目标后,环境设置就完成了。

构建编译

准备好环境之后,直接在edk2根目录下,执行build命令就行

build

build会去读取Conf/target.txt文件,也可以不读取使用命令行的方式

build -t GCC48 -a X64 -p OvmfPkg/OvmfPkgX64.dsc -b 

编译完成以后,可以在Build/OvmfX64/DEBUG_GCC48/FV/目录下找到生成UEFI文件OVMF.fd。

测试是否能通过UEFI启动虚拟机

直接将原来虚拟机运行命令的

-bios seabios-tpm/out/bios.bin

修改为:即可运行,不过需要操作系统支持UEFI启动。

--bios Build/OvmfX64/DEBUG_GCC48/FV/OVMF.fd

启动界面:

OVMF-CentOS使用ovmf作为qemu的uefi启动虚拟机

编译时启用TPM功能

添加-D TPM2_ENABLE -D TPM2_CONFIG_ENABLE选项即可。

build -p OvmfPkg/OvmfPkgX64.dsc -a X64  -b DEBUG -t GCC5  -D TPM2_ENABLE -D TPM2_CONFIG_ENABLE

参考文章

正文完
 
landery
版权声明:本站原创文章,由 landery 2023-06-21发表,共计2202字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)