This is the developer documentation for coreboot. It is built from Markdown files in the Documentation directory in the source code.

Purpose of coreboot¶

coreboot is a project to develop open source boot firmware for various architectures. Its design philosophy is to do the bare minimum necessary to ensure that hardware is usable and then pass control to a different program called the payload.

Separation of concerns¶ The payload can then provide user interfaces, file system drivers, various policies etc. to load the OS. Through this separation of concerns coreboot maximizes reusability of the complicated and fundamental hardware initialization routines across many different use cases, no matter if they provide standard interfaces or entirely custom boot flows. Popular payloads in use with coreboot are SeaBIOS, which provides PCBIOS services, Tianocore, which provides UEFI services, GRUB2, the bootloader used by many Linux distributions, or depthcharge, a custom boot loader used on Chromebooks.

No resident services (if possible)¶ Ideally coreboot completely hands over control to the payload with no piece of coreboot remaining resident in the system, or even available for callback. Given the reality of contemporary computer design, there’s often a small piece that survives for the whole runtime of the computer. It runs in a highly privileged CPU mode (e.g. SMM on x86) and provides some limited amount of services to the OS. But here, too, coreboot aims to keep everything at the minimum possible, both in scope (e.g. services provided) and code size.

No specification of its own¶ coreboot uses a very minimal interface to the payload, and otherwise doesn’t impose any standards on the ecosystem. This is made possible by separating out concerns (interfaces and resident services are delegated to the payload), but it’s also a value that is deeply ingrained in the project. We fearlessly rip out parts of the architecture and remodel it when a better way of doing the same was identified.