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

Nicolas Pitre nicolas.pitre at linaro.org
Wed Sep 14 11:10:44 EDT 2011


On Wed, 14 Sep 2011, Dave Martin wrote:

> On Wed, Sep 14, 2011 at 10:04:28AM -0400, Nicolas Pitre wrote:
> > 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).
> 
> That seems reasonable.
> 
> Should we document this recommendation, in the Kconfig help or
> Documentation/?

I'll add some scary wording to the help text, and make it depend on 
EXPERIMENTAL as well.  I prefer not to impose some expectations on the 
zImage layout for this even if not in use, like being stuck with an 
offset that we'll always have to guard against corruption due to people 
blindly scripting the zImage poking you suggested even when it is not 
needed.

People will find ways to screw it up if they really want to anyway.  So 
I'd lean towards keeping this simple and not create any legacy around 
this hopefully temporary accommodation feature.


Nicolas



More information about the linux-arm-kernel mailing list