EDK2开发(2)-编译OVMF并在QEMU运行
本文参考
我们接下来根据这个教程进行:OVMF · tianocore/tianocore.github.io Wiki
What is OVMF
OVMF is an EDK II based project to enable UEFI support for Virtual Machines. OVMF contains sample UEFI firmware for QEMU and KVM
OVMF 可以跑在虚拟机上,并为其提供 UEFI 支持,还有简单的 UEFI Shell 实现
编译 OVMF
和上一次构建 HelloWorld 的时候一样,编辑$CONF_PATH/target.txt
EDK2 提供了多种选择:
ACTIVE_PLATFORM | TARGET_ARCH | PEI code | DXE/UEFI code |
---|---|---|---|
OvmfPkg/OvmfPkgIa32.dsc | IA32 | IA32 | IA32 |
OvmfPkg/OvmfPkgIa32X64.dsc | IA32 X64 | IA32 | X64 |
OvmfPkg/OvmfPkgX64.dsc | X64 | X64 | X64 |
跟随教程,接下来我选择:
1 | ACTIVE_PLATFORM = OvmfPkg/OvmfPkgX64.dsc |
1 | build |
然后你就可以找到编译目标$WORKSPACE/Build/OvmfX64/DEBUG_GCC5/FV/OVMF.fd
另一种编译方法
脱离target.txt
进行编译
1 | build -a X64 -t GCC5 -p OvmfPkg/OvmfPkgX64.dsc -b DEBUG |
虚拟机中运行
安装 QEMU
实体机还是算了 8
1 | sudo apt install qemu |
运行 QEMU
把镜像拷过来
1 | bakaft@BakaFT-PC:~$ mkdir ~/run-ovmf |
新建一个目录用于当作 UEFI Shell 的文件系统
1 | bakaft@BakaFT-PC:~/run-ovmf$ mkdir hda-contents |
然后运行
1 | bakaft@BakaFT-PC:~/run-ovmf$ qemu-system-x86_64 -L . -pflash bios.bin -nographic -net none --hda fat:rw:hda-contents |
使用
-net none
跳过网络启动使用
-nographic
使 qemu 直接从命令行输出而不是输出到窗口服务器(除非你的 WSL2 实例有窗口服务器,不然不加这个参数会报错)使用
--hda
参数挂载本地文件夹作为文件系统功能
接下来就进入了 qemu,并且随后立刻启动到 UEFI Shell
1 | UEFI Interactive Shell v2.2 |
呃呃。。退格键都不能用的。。
退出 QEMU
不想玩了可以Ctrl-A X
退出 QEMU,这个操作是指:
- 先按住
Ctrl
+A
(同时,或者先后按) - 松开你的手
- 按一下
X
EDK2开发(2)-编译OVMF并在QEMU运行
https://bakaft.github.io/2022/05/22/EDK2开发-2-编译OVMF并在QEMU运行/