Over the years, Linux has been consolidated as the preferred OS for embedded systems based on Arm® architecture. For some time, Linux support on Arm architecture grew in a not well-structured way. Because most of the peripherals and I/O devices in Arm are not hotplug, it was necessary to describe the hardware to the Linux kernel in the source code. This approach was generating a big amount of duplicated code and maintenance issues.
The solution adopted by the community for this problem was the Device Tree. The Device Tree is a data structure used to describe the hardware topology and configuration to the Linux kernel. The idea is simple: the hardware (CPU, memory, buses and peripherals) is described in a file with a .dts extension, which looks like an XML or JSON format. This file in compiled into a binary file (.dtb) which is parsed by the Linux kernel during boot time. The Linux kernel uses the information in the Device Tree to identify the hardware topology, configure the hardware and load the device drivers.
- Understanding the Device Tree syntax
- Compiling and booting with a Device Tree
- Customizing a Device Tree in order to support a new hardware device
- Creating a Device Tree from scratch for a new hardware platform