Device Trees

Introduction
Device trees are a method used by the operating system to determine the hardware configuration. Device trees were originally developed for the PowerPC OpenFirmware software, as a way to encapsulate platform information and convey it to the operating system. The Linux kernel currently can read device tree information for x86 and ppc architectures. There is interest in extending support for device trees to other platforms, to unify the handling of platform description across kernel architectures.

A device tree can be built at compile-time and statically linked into the kernel. Or it can be created by the bootloader firmware and passed to the kernel at boot time. The operating system reads the device tree and uses it to figure out such things like how much memory is available, bus layout, list of devices, and how interrupts are connected.

The Linux kernel includes a "compiler" which takes a device tree description in "dts" format and produces a binary, "dtc", format, suitable for linking into the kernel. See scripts/dtc in the kernel source directory.

There is documentation describing device tree support (with information current as of 2006) in the Linux kernel source tree at: Documentation/powerpc/booting-without-of.txt

Presentations and Papers
"Using the Device Tree to Describe Embedded Hardware" - Grant Likely, Embedded Linux Conference, 2008 http://www.celinux.org/elc08_presentations/glikely--device-tree.pdf

"A Symphony of Flavours: Using the device tree to describe embedded hardware" - Grant Likely and Josh Boyer - paper for OLS 2008 http://ols.fedoraproject.org/OLS/Reprints-2008/likely2-reprint.pdf

Note from Device Tree Birds of a Feature session at OLS 2008: http://lists.ozlabs.org/pipermail/devicetree-discuss/2008-July/000004.html

Coming Up Soon
Grant's talk at Plumber's conference 2009 - http://linuxplumbersconf.org/ocw/proposals/47

Device-tree Mailing List
https://lists.ozlabs.org/listinfo/devicetree-discuss

Mailing list discussion
Recent discussion of "Flattened Device Tree" work on linux-embedded mailing list: http://www.mail-archive.com/linux-embedded@vger.kernel.org/msg01721.html

Russel King is against adding support for FDT to the ARM platform: http://lkml.indiana.edu/hypermail/linux/kernel/0905.3/01942.html (see whole thread for interesting discussion)

David Gibson defends FDT: http://lkml.indiana.edu/hypermail/linux/kernel/0905.3/02304.html

Xilink device tree generator documentation
Xilinx provides a device-tree generator: http://xilinx.wikidot.com/device-tree-generator "The device tree generator is a Xilinx EDK tool that plugs into the Automatic BSP Generation features of the tool, XPS"