Booting DT kernel on a non-DT bootloader

Simon Horman horms at verge.net.au
Tue Sep 11 01:18:38 EDT 2012


On Mon, Sep 03, 2012 at 05:54:29PM +0900, Simon Horman wrote:
> Hi,
> 
> it has come to pass that for some of the boards under mach-shmobile
> we are in the following situation:
> 
> * The kernel requires a device tree for booting
> * The default boot loader for the board does not support device tree;
>   and in general it is not practical for developers to upload the
>   boot-loader.
> 
> Fortunately there is a solution, which is to append a device tree to
> the kernel image and boot that by the normal means supported by the
> boot loader.
> 
> Here is how to achieve that:
> 
> 1. Make sure you have CONFIG_ARM_APPENDED_DTB=y in your .config
> 
> 2. Create original zImage
> 
>     ARCH=arm make zImage

      If you intend to create a uImage (step 5) then you should run

      ARCH=arm make uImage

      This ensures that arch/arm/boot/.uImage.cmd is up to date

> 3. Create flattened device tree (run this in kernel tree)
> 
>    i) There is code in the next branch of my renesas tree to allow
>       this to be achieved using
> 
>       # make dtbs
> 
>       This will create the device tree for the prevaling kernel config,
>       if one exists.
> 
>       e.g For Armadillo 800 EVA
> 
>       # make dtbs
>       scripts/kconfig/conf --silentoldconfig Kconfig
>         DTC     arch/arm/boot/r8a7740-armadillo800eva.dtb
>       DTC: dts->dtb  on file "arch/arm/boot/dts/r8a7740-armadillo800eva.dts"
> 
>       Else it will do nothing
>       # make dtbs
>       scripts/kconfig/conf --silentoldconfig Kconfig
>       make[1]: Nothing to be done for `arch/arm/boot/dtbs'.
> 
> 
>    ii) If you are running a current or other kernel, which does not
>        support "make dtbs" for mach-shmobile boards, then the dtb
>        may manually be compiled using dtc.
> 
>        e.g. For the Armadillo 800 EVA
> 
>        dtc -I dts -O dtb arch/arm/boot/dts/r8a7740-armadillo800eva.dts \
>            -o arch/arm/boot/dts/r8a7740-armadillo800eva.dtb
> 
>     Note: Please make sure you have a recent version of dtc.
>           I have verified that the above works with DTC 1.3.0 from
> 	  the Debian device-tree-compiler 1.3.0-2 package.
> 	  I have had reports that it fails using DTC 1.2.0.
> 
> 4. Append device tree to zImage (very high-tech!)
> 
>    cat arch/arm/boot/zImage \
> 	arch/arm/boot/dts/r8a7740-armadillo800eva.dtb >
> 	arch/arm/boot/zImage.dtb
> 
> 5. Create uImage (optional)
> 
>    If you need to create a uImage then this may be done using
>    the new zImage + dtb as follows:
> 
>    # cp arch/arm/boot/zImage.dtb arch/arm/boot/zImage
>    # $(cut -f 3- -d ' ' < arch/arm/boot/.uImage.cmd)
> 
> 6. You should now be able to either boot the resulting zImage.dtb
>    or uImage, use whichever suits the needs of the bootloader in use.
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-sh" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 



More information about the linux-arm-kernel mailing list