Specifications
7.5.1. Bootlog of tftp'd Linux kernel with Root Filesystem over NFS◊
7.6. Boot from NAND Flash Memory♦
7.7. Standalone Operation with Ramdisk Image♦
7. Booting Embedded Linux
7.1. Introduction
In principle, if you have a Linux kernel image and the flattened device tree blob somewhere in system
memory (RAM, ROM, flash...), then all you need to boot the system is the bootm command. Assume a
Linux kernel image has been stored at address 0x42000000 and the flattened device tree blob has been stored
at address 0x41000000 - then you can boot this image with the following command:
=> bootm 42000000 - 41000000
7.2. Flattened Device Tree Blob
Linux kernel expects certain information on the hardware that it runs on. For kernels compiled with fdt
support, 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 m28 board is found in arch/arm/boot/dts/m28.dts file. Before the device tree can be
passed to the kernel, it has to be compiled to the binary form by the dtc compiler. The dtc 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=arm CROSS_COMPILE=arm-linux-gnueabi- m28.dtb
After the blob has been compiled, it has to be transferred from where it was built
("arch/arm/boot/m28.dtb") to target's memory, for example over the TFTP protocol using U-Boot's
tftp command. Then, the blob is passed to the kernel by the bootm command, and its address in memory is
one of the arguments to bootm - 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. See the board-specific function ft_board_setup()
and related routines.
U-Boot also has provisions to alter a flattened device tree in arbitrary ways from the command line, refer to
the description of the fdt commands found in UBootCmdFDT.
Notes:
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 undergoing
frequent changes. Reader is encouraged to watch the u-boot-users and linuxppc-dev mailing
lists for important news (required version of the dtc compiler, blob compilation options, flattened
•
7.2. Flattened Device Tree Blob 87