linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* Booting DT kernel on a non-DT bootloader
@ 2012-09-03  8:54 Simon Horman
  2012-09-11  5:18 ` Simon Horman
  0 siblings, 1 reply; 2+ messages in thread
From: Simon Horman @ 2012-09-03  8:54 UTC (permalink / raw)
  To: linux-arm-kernel

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

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.

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Booting DT kernel on a non-DT bootloader
  2012-09-03  8:54 Booting DT kernel on a non-DT bootloader Simon Horman
@ 2012-09-11  5:18 ` Simon Horman
  0 siblings, 0 replies; 2+ messages in thread
From: Simon Horman @ 2012-09-11  5:18 UTC (permalink / raw)
  To: linux-arm-kernel

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
> 

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2012-09-11  5:18 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-09-03  8:54 Booting DT kernel on a non-DT bootloader Simon Horman
2012-09-11  5:18 ` Simon Horman

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).