How-To: Compile EDK2/OVMF From Source on Linux [2021]

Published by Philipp Schuster on

EDK2 is a development environment to create firmware implementations that follows the UEFI specification. It is part of tianocore project. which is the reference implemenation for UEFI. Multiple “packages”, which are the sources to build tianocore for different platforms (x86, ARM, QEMU), are located inside the git repository of “EDK2”. OVMF, which stands for Open Virtual Machine Firmware, is one of these packages. It enables UEFI inside virtual machines, like in QEMU environments. This is useful to test UEFI applications (hello world, bootloaders, graphical user interfaces to configure your processor/GPU) inside a VM without the need of booting a real machine.

In my case I wanted to compile OVMF from source but the existing how-to’s were not satisfying, such as “How to build OVMF”. It took me a while to figure everything out and after all it is quite easy. Here is how I’ve done it [in May 2021 on Ubuntu 21.04]. I think it should work on all Linux/UNIX-systems the same way. Depending on your system, you may need to install other-named packages or use another package manager.

# all essential packages
$ sudo apt update
$ sudo apt install -y git nasm iasl build-essential uuid-dev

$ git clone
$ cd ./edk2
$ git submodule update --init
$ make -C BaseTools

Now open <edk2-root>/Conf/target.txt and make sure the keys (which will already exist in the file) have the following values

# taken from
ACTIVE_PLATFORM       = OvmfPkg/OvmfPkgX64.dsc
TARGET_ARCH           = X64

Now execute the following commands:

$ cd <edk2-root>/OvmfPkg
$ ./

That’s it, it should work! The files that you probably want now after the build (to boot this inside QEMU) are located in “<edk2-root>/Build/OvmfX64/DEBUG_GCC5/FV/OVMF_{CODE,VARS}.fd

PS: Here are some interesting comments about OVMF:


  • “python” is missing (happened to me on Ubuntu 21.04).): It’s okay to use python3. If you already have python3 available, execute the following command:
    $ ln -s /usr/bin/python3 /usr/bin/python

Philipp Schuster

Hi, I'm Philipp and interested in Computer Science. I especially like low level development, making ugly things nice, and de-mystify "low level magic".


Leave a Reply

Your email address will not be published. Required fields are marked *