UEFI Playground
Low-level firmware development in C
A hands-on exploration of UEFI internals, boot processes, memory management and system initialization.
Built with:
- C
- GNU-EFI
- QEMU
- OVMF
- Linux
Modern operating systems hide many low-level details behind layers of abstraction.
This project explores what happens before an operating system starts: how firmware initializes hardware, provides services, manages memory and transfers control to the next boot stage.
Getting Started
New to UEFI development or this project?
Start here: Getting Started
Architecture
Linux Host
|
v
QEMU + OVMF Firmware
|
+--> UEFI Applications
| |
| +--> Memory Map Viewer
| +--> Filesystem Explorer
| +--> Graphics Demo
|
+--> Boot Loader
|
+--> Linux Loader (planned)
Learning Topics
- UEFI Applications and Boot Services
- Memory management via
GetMemoryMap() - Filesystem access through EFI protocols
- Graphics Output Protocol (GOP)
- Boot process transition (firmware -> OS)
- QEMU + OVMF emulation environment
Applications
The project currently contains several standalone UEFI applications exploring different parts of the firmware environment.
Memory Map Viewer
Explores how UEFI represents system memory before the operating system starts.
Features:
- Retrieves the firmware memory map via
GetMemoryMap() - Displays EFI memory descriptors
- Groups contiguous memory regions
- Calculates memory sizes

Read more about Memory Map Viewer
Filesystem Explorer
Demonstrates access to EFI filesystem protocols.
Features:
- Locates EFI Simple File System Protocol
- Opens filesystem volumes
- Enumerates directories
- Reads file metadata

Read more about Filesystem Explorer
Graphics Output Protocol Demo
Explores direct framebuffer access using the UEFI Graphics Output Protocol.
Features:
- Retrieves framebuffer information
- Draws pixels directly into framebuffer memory
- Implements basic drawing primitives

Hello World UEFI Application
The first application of the project.
It demonstrates:
- Creating a
.efiexecutable - Receiving the UEFI System Table
- Writing output through firmware services

Core Concepts
Technical Findings
During development several implementation details turned out to be less obvious than expected.
Topics include: