On Open-Source Firmware Systems Landscape¶
|May 6, 2020||Initial Version|
I’m obsessed with firmware projects, maybe because that’s where I started. First it’s SeaBIOS, the default one used by QEMU. Then UEFI, something I have never used (!).
There are a lot open-source firmware projects. I was trying to understand their relationship. After some research, I drew the following landscape figure.
- Coreboot and Libreboot
- Coreboot seems very interesting. It’s only doing one job, which is initialize the very low-level memory controller and on-board resources. It uses cache as memory.
- SeaBIOS: the default BIOS used by QEMU
- qboot: an alternative and lightweight BIOS for QEMU
- Those are massive hackers, respect.
- My experience about BIOS is calling them while the kernel (LegoOS) is running at 16-bit. BIOS is the OS for a just-booted kernel. I remember the lower 1MB is never cleared, maybe we could invoke the BIOS at 32 or 64-bit mode?
- UEFI EDK II
- “EDK II is a firmware development environment for the UEFI and UEFI Platform Initialization (PI) specifications”
- Part of the TianoCore project, an open-source UEFI platform
- The Unified Extensible Firmware Interface (UEFI) is a specification that defines a software interface between an operating system and platform firmware. UEFI is designed to replace the Basic Input/Output System (BIOS) firmware interface.
- OVMF: OVMF is an EDK II based project to enable UEFI support for Virtual Machines. OVMF contains sample UEFI firmware for QEMU and KVM.
- Microsoft Project Mu, a separate fork of EDK II
- “Project Mu is a modular adaptation of TianoCore’s edk2 tuned for building modern devices using a scalable, maintainable, and reusable pattern”
- It’s homepage explains the motivation behind it. Microsoft Surface is using it.
- A book:
Beyond BIOS Developing with the Unified Extensible Firmware Interface.
- UEFI EDK II
- Then boot loaders such as GRUB and U-Boot
If you are using a normal laptop or desktop, chances are, none of those firmware is used. Normally machines are shipped with commercial firmwares.
To me, I like SeaBIOS project the best. It’s simple and can boot everything we need. (For example, Linux, LegoOS as well).
- Coreboot/Libreboot/UEFI: for motherboard init, e.g., init memory controller.
- GRUB2/U-Boto: Bootloader