[PATCH 2/6] ARM: zImage: Allow the appending of a device tree binary

Nicolas Pitre nicolas.pitre at linaro.org
Wed Sep 14 10:04:28 EDT 2011


On Wed, 14 Sep 2011, Dave Martin wrote:

> On Wed, Sep 14, 2011 at 01:41:42AM -0400, Nicolas Pitre wrote:
> > From: Nicolas Pitre <nicolas.pitre at linaro.org>
> > 
> > This patch provides the ability to boot using a device tree that is appended
> > to the raw binary zImage (e.g. cat zImage <filename>.dtb > zImage_w_dtb).
> > 
> > Signed-off-by: John Bonesio <bones at secretlab.ca>
> > [nico: adjusted to latest zImage changes plus additional cleanups]
> > Signed-off-by: Nicolas Pitre <nicolas.pitre at linaro.org>
> > Acked-by: Grant Likely <grant.likely at secretlab.ca>
> > Acked-by: Tony Lindgren <tony at atomide.com>
> > ---
> >  arch/arm/Kconfig                |    8 ++++
> >  arch/arm/boot/compressed/head.S |   70 +++++++++++++++++++++++++++++++++++++--
> >  2 files changed, 75 insertions(+), 3 deletions(-)
> > 
> > diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
> > index 5ebc5d922e..83323c2b1f 100644
> > --- a/arch/arm/Kconfig
> > +++ b/arch/arm/Kconfig
> > @@ -1781,6 +1781,14 @@ config ZBOOT_ROM_SH_MOBILE_SDHI
> >  
> >  endchoice
> >  
> > +config ARM_APPENDED_DTB
> > +	bool "Use appended device tree blob to zImage"
> > +	depends on OF && !ZBOOT_ROM
> > +	help
> > +	  With this option, the boot code will look for a device tree binary
> > +	  (dtb) appended to zImage
> > +	  (e.g. cat zImage <filename>.dtb > zImage_w_dtb).
> > +
> >  config CMDLINE
> >  	string "Default kernel command string"
> >  	default ""
> > diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S
> > index e95a598960..3ce5738ddb 100644
> > --- a/arch/arm/boot/compressed/head.S
> > +++ b/arch/arm/boot/compressed/head.S
> > @@ -216,6 +216,59 @@ restart:	adr	r0, LC0
> >  		mov	r10, r6
> >  #endif
> >  
> > +		mov	r5, #0			@ init dtb size to 0
> > +#ifdef CONFIG_ARM_APPENDED_DTB
> > +/*
> > + *   r0  = delta
> > + *   r2  = BSS start
> > + *   r3  = BSS end
> > + *   r4  = final kernel address
> > + *   r5  = appended dtb size (still unknown)
> > + *   r6  = _edata
> > + *   r7  = architecture ID
> > + *   r8  = atags/device tree pointer
> > + *   r9  = size of decompressed image
> > + *   r10 = end of this image, including  bss/stack/malloc space if non XIP
> > + *   r11 = GOT start
> > + *   r12 = GOT end
> > + *   sp  = stack pointer
> > + *
> > + * if there are device trees (dtb) appended to zImage, advance r10 so that the
> > + * dtb data will get relocated along with the kernel if necessary.
> > + */
> > +
> > +		ldr	lr, [r6, #0]
> > +#ifndef __ARMEB__
> > +		ldr	r1, =0xedfe0dd0		@ sig is 0xd00dfeed big endian
> > +#else
> > +		ldr	r1, =0xd00dfeed
> > +#endif
> 
> Do we worry that garbage in memory after the zImage might match this
> magic number?
> 
> For example, if an ordinary userspace program allocates a huge number
> of pages and fills them with bogus device tree headers, is there a chance
> that the those headers could remain in memory across a reboot?

In theory this _could_ be possible.  However I don't expect this feature 
to be enabled if you are not going to actually use it, especially in a 
production setup.  If you are not appending a DTB to your kernel then 
there is simply no point keeping this config option set (normally you 
should use this option only because you have no other choices).


Nicolas



More information about the linux-arm-kernel mailing list