Open-source Firmware and Bootloaders¶
|Dec 7, 2020||add iPXE|
|May 6, 2020||Initial Version|
In this blog post, I will review the current firmware and bootloader ecosystem.
I admire those firmware projects, maybe because that’s where I started. At first I used SeaBIOS (the default one used by QEMU) to build OS. Then I came across UEFI, though I have never used it.
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/Libreboot/UEFI: for motherboard init, e.g., init memory controller.
- GRUB2/U-Boto: Bootloader
- 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
- iPXE, network bootloader, this is an open-source version. As their website says, iPXE allows you to:
boot from a web server via HTTP boot from an iSCSI SAN boot from a Fibre Channel SAN via FCoE boot from an AoE SAN boot from a wireless network boot from a wide-area network boot from an Infiniband network control the boot process with a script
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 most. It’s simple and can boot everything we need. (For example, Linux, LegoOS as well).