Linux kernel expects certain information on the hardware that it runs on. For kernels compiled with ARCH=powerpc, this information has the form of a device tree, which is based on the Open Firmware specification. Bootloaders like U-Boot that do not implement the Open Firmware API, are expected to pass to the kernel a binary form of the flattened device tree, commonly referred to as FDT blob
or simply the blob
Device trees are defined in human-readable text files, which are part of the Linux 2.6 source tree. Device tree source for the canyonlands board is found in
file. Before the device tree can be passed to the kernel, it has to be compiled to the binary form by the
compiler is included with the Linux kernel since 2.6.25. Since 2.6.26 there is also a simple makefile rule to generate the blob:
make ARCH=powerpc CROSS_COMPILE=ppc_4xxFP- canyonlands.dtb
After the blob has been compiled, it has to be transferred from
where it was built (
to target's memory, for example over the TFTP
protocol using U-Boot's
command. Then, the blob is passed to the kernel by the
command, and its address in memory is one of the arguments to
- refer to the description of this command in UBootCmdGroupExec
for more details. Note that U-Boot makes some automatic modifications to the blob before passing it to the kernel - mainly adding and modifying information that is learnt at run-time.
U-Boot also has provisions to alter a flattened device tree in arbitrary ways from the command line, refer to the description of the
commands found in UBootCmdGroupMisc
- Flattened Device Tree custodian's page at http://www.denx.de/wiki/U-Boot/UBootFdtInfo contains useful information, and a number of references.
- At the time of this writing (September 2007) blob handling is still a very fresh feature and undergonig frequent changes. Reader is encouraged to watch the
linuxppc-dev mailing lists for important news (required version of the dtc compiler, blob compilation options, flattened device tree source file structure, etc.).