Device Tree is used by the Linux kernel to configure and initialize hardware in embedded systems during bootup process. It is passed to the kernel by the bootloader and contains detailed information about the hardware components present on the system.
1. Bootloader Stage: The boot process starts with the bootloader, which is typically responsible for loading the kernel image and the Device Tree Blob into memory. For example, the Raspberry Pi, the bootloader (ex:- U-Boot) loads the kernel image (ex:- UImage) and the Device Tree Blob (ex:- bcm27xx-rpi-4-b.dtb) into memory.
2. Kernel Initialization: When the bootloader hands over control to the Linux kernel, it passes the address of the Device Tree Blob in a specific CPU register (ex:- R2 for ARM architecture)
3. Device Tree Parsing: The Linux kernel parses the Device Tree Blob to extract information about various hardware components present on the board. This information includes details about the CPU, memory, buses, peripherals (ex:- UART, I2C, GPIO etc) and various custom devices connected to the board.
4. Configuration and Initialization: Based on the information extracted from the Device Tree Blob, the kernel configures and initializes the hardware components to make them usable by the operating system and applications.