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
2
3
ACTIVE_PLATFORM       = OvmfPkg/OvmfPkgX64.dsc
TARGET_ARCH = X64
TOOL_CHAIN_TAG = GCC5
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
2
sudo apt install qemu
sudo apt install qemu-system

运行 QEMU

把镜像拷过来

1
2
3
bakaft@BakaFT-PC:~$ mkdir ~/run-ovmf
bakaft@BakaFT-PC:~$ cd ~/run-ovmf/
bakaft@BakaFT-PC:~/run-ovmf$ cp ~/edk2/Build/OvmfX64/DEBUG_GCC5/FV/OVMF.fd bios.bin

新建一个目录用于当作 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
2
3
4
5
6
7
8
9
10
11
12
UEFI Interactive Shell v2.2
EDK II
UEFI v2.70 (EDK II, 0x00010000)
Mapping table
FS0: Alias(s):HD0a1:;BLK1:
PciRoot(0x0)/Pci(0x1,0x1)/Ata(0x0)/HD(1,MBR,0xBE1AFDFA,0x3F,0xFBFC1)
BLK0: Alias(s):
PciRoot(0x0)/Pci(0x1,0x1)/Ata(0x0)
BLK2: Alias(s):
PciRoot(0x0)/Pci(0x1,0x1)/Ata(0x0)
Press ESC in 1 seconds to skip startup.nsh or any other key to continue.
Shell>

呃呃。。退格键都不能用的。。

退出 QEMU

不想玩了可以Ctrl-A X退出 QEMU,这个操作是指:

  1. 先按住Ctrl+A(同时,或者先后按)
  2. 松开你的手
  3. 按一下X
Author

BakaFT

Posted on

2022-05-22

Updated on

2023-12-28

Licensed under

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×