An overlay is a binary DTBO file that contains only the differences from a base DTB. At boot time, the bootloader loads the base DTB, loads any required DTBOs, and then applies the overlay's changes onto the base tree. This allows for:
;
The tradeoff: changes to hardware (like plugging into a different carrier board) require loading a different DTB—hence the need for firmware to select the correct one. dtb firmware
The Device Tree is a data structure that describes the hardware components of a computer system. It lists CPUs, memory addresses, interrupt controllers, UARTs, I2C buses, GPIO pins, and peripheral devices. The (DTB) is the compiled, binary version of the Device Tree Source (DTS) file. The Linux kernel reads this blob at boot time to understand what hardware it is running on.
Hardware can change. You might plug in an external HAT (Hardware Attached on Top) or enable a secondary SPI interface. To avoid needing to recompile the entire DTB for every tiny change, the ecosystem uses . An overlay is a binary DTBO file that
The DTB is designed for efficiency. It is a single, contiguous block of data, known as a , which can be passed easily between the bootloader and the kernel. Its internal layout is strictly defined and consists of several key sections:
Thus, the Linux kernel cannot "guess" the hardware layout. It needs a map. That map is the DTB. The is responsible for providing that map early in the boot process. Without a valid DTB, the kernel has no idea where its console UART is located and will crash silently. The Device Tree is a data structure that
On x86 servers and PCs, ACPI (Advanced Configuration and Power Interface) provides runtime hardware enumeration. But ACPI requires to be executed by the OS, which is heavy, complex, and historically buggy. Embedded systems favor DTB because: