EDK2

From OSDev.wiki
Revision as of 16:48, 28 July 2021 by osdev>Nexos (Add structure paragraph)
Jump to navigation Jump to search

EDK2 is the official development environment for UEFI applications. It is developed by the open-source Tianocore project, of which Intel, HP, and Microsoft are the primary contributors. Although it may be bigger the GNU-EFI, it has more features, meaning that some OS developers may prefer it over GNU-EFI.

What is EDK2?

EDK2 is full on implementation of the UEFI spec. It contains the Open Virtual Machine Firmware (OVMF), which is primarily targeted at QEMU, and is used by many OS developers to test out there UEFI applications. It also has ARM and AArch64 firmware packages for QEMU and various other boards, and RISC-V firmware packages for various HiFive boards. It also has tools for UEFI driver developers, but that is for now outside the scope of this wiki.

Of most interest the OS developers is the UEFI library and the EDK2 build system. This article will show you the structure of EDK2, how to build firmware for QEMU and real machines, and how to build UEFI applications.

Structure of EDK2

EDK2 is made up of multiple repos, all of which can be found at [1]. The main ones are: - edk2, which contains the build system, library, OVMF, and ArmVirt firmware - edk2-platforms, which contains firmware for various real hardware platforms, such as the SiFive U450, Raspberry Pi, and quite a few others - edk2-non-osi, which contains proprietary binary blobs for various platforms. EDK2 itself is written in C with some Python, and is licensed under the BSD 2 Clause + Patent license. The blobs are subject to there own licenses.

Directory structure

EDK2 is split up into multiple subdirectories, where each one normally contains a "Package". The OvmfPkg subdirectory contains OVMF, the MdePkg subdirectory contains the UEFI library, and so on. Each one of these contains a file ending in .dsc. This file describes the package inside of the folder, and contains things such as dependencies, different components, and so on. Each component is described its own file that contains sources, application type, and so on. TODO: Describe this in more detail