Patchwork Add KERNEL_EXTRA_ARGS parameter

login
register
mail settings
Submitter Wolfgang Denk
Date May 3, 2012, 1:48 p.m.
Message ID <1336052928-30764-1-git-send-email-wd@denx.de>
Download mbox | patch
Permalink /patch/26959/
State New
Headers show

Comments

Wolfgang Denk - May 3, 2012, 1:48 p.m.
With recent kernel versions, some ARM configurations need may fail to
build with errors like this:

	multiple load addresses: 0x80008000 0x80008000
	This is incompatible with uImages
	Specify LOADADDR on the commandline to build an uImage

We cannot pass this information in EXTRA_OEMAKE, as
"meta/classes/kernel.bbclass" explicitly ignores all EXTRA_OEMAKE
settings.  So add KERNEL_EXTRA_ARGS parameter so affected boards
can add for example

	KERNEL_EXTRA_ARGS = "LOADADDR=0x80008000"

to their configuration.  We make this general enough so other needed
command line options can be passed as well when compiling the kernel.

Signed-off-by: Wolfgang Denk <wd@denx.de>
---
See also
http://thread.gmane.org/gmane.comp.handhelds.openembedded.core/19444

 meta/classes/kernel.bbclass |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)
Koen Kooi - May 3, 2012, 2:02 p.m.
Op 3 mei 2012, om 15:48 heeft Wolfgang Denk het volgende geschreven:

> With recent kernel versions, some ARM configurations need may fail to
> build with errors like this:
> 
> 	multiple load addresses: 0x80008000 0x80008000
> 	This is incompatible with uImages
> 	Specify LOADADDR on the commandline to build an uImage
> 
> We cannot pass this information in EXTRA_OEMAKE, as
> "meta/classes/kernel.bbclass" explicitly ignores all EXTRA_OEMAKE
> settings.  So add KERNEL_EXTRA_ARGS parameter so affected boards
> can add for example
> 
> 	KERNEL_EXTRA_ARGS = "LOADADDR=0x80008000"

Isn't KERNEL_EXTRA_OEMAKE clearer in this case? I see kernel args being what ends up in /proc/cmdline.
Eric BENARD - May 3, 2012, 2:23 p.m.
Le Thu,  3 May 2012 15:48:48 +0200,
Wolfgang Denk <wd@denx.de> a écrit :

> With recent kernel versions, some ARM configurations need may fail to
> build with errors like this:
> 
> 	multiple load addresses: 0x80008000 0x80008000
> 	This is incompatible with uImages
> 	Specify LOADADDR on the commandline to build an uImage
> 
> We cannot pass this information in EXTRA_OEMAKE, as
> "meta/classes/kernel.bbclass" explicitly ignores all EXTRA_OEMAKE
> settings.  So add KERNEL_EXTRA_ARGS parameter so affected boards
> can add for example
> 
> 	KERNEL_EXTRA_ARGS = "LOADADDR=0x80008000"
> 
> to their configuration.  We make this general enough so other needed
> command line options can be passed as well when compiling the kernel.
> 
> Signed-off-by: Wolfgang Denk <wd@denx.de>
Acked-by: Eric Bénard <eric@eukrea.com>

useful when multiple machines with different LOADADDR are built in the
same kernel.

Eric
Richard Purdie - May 3, 2012, 2:28 p.m.
On Thu, 2012-05-03 at 16:02 +0200, Koen Kooi wrote:
> Op 3 mei 2012, om 15:48 heeft Wolfgang Denk het volgende geschreven:
> 
> > With recent kernel versions, some ARM configurations need may fail to
> > build with errors like this:
> > 
> > 	multiple load addresses: 0x80008000 0x80008000
> > 	This is incompatible with uImages
> > 	Specify LOADADDR on the commandline to build an uImage
> > 
> > We cannot pass this information in EXTRA_OEMAKE, as
> > "meta/classes/kernel.bbclass" explicitly ignores all EXTRA_OEMAKE
> > settings.  So add KERNEL_EXTRA_ARGS parameter so affected boards
> > can add for example
> > 
> > 	KERNEL_EXTRA_ARGS = "LOADADDR=0x80008000"
> 
> Isn't KERNEL_EXTRA_OEMAKE clearer in this case? I see kernel args
> being what ends up in /proc/cmdline.

In many ways I wish we could use EXTRA_OEMAKE and try and keep the API
simpler. Looking at the code, I think it actually can work even with the
existing code in some circumstances.

Whilst kernel.bbclass does zero out the contents, it does this simply to
get rid of the default value (the -e MAKEARGS= bit).

The following recipe will therefore work:

"""
<some recipe code>

inherit kernel

EXTRA_OEMAKE += 'LOADADDR=0x80008000'
"""

but the problem is likely this can't be set from machine.conf.

I was wondering about changing the system so that in bitbake.conf we
set:

OEMAKEDEFAULT = "-e MAKEFLAGS="
EXTRA_OEMAKE = "${OEMAKEDEFAULT}"

and then kernel.bbclass can zero out OEMAKEDEFAULT. The trouble is you
want to set:

EXTRA_OEMAKE_append_xxxx = " LOADADDR=0x80008000"

and I'm not coming up with a good value of xxxx other than
pn-linux-xxxx :/. We could consider an extra override for the kernel
case I guess.

I would prefer not to add mode global variables unless we can possibly
help it...

Cheers,

Richard
Darren Hart - May 8, 2012, 3:20 p.m.
On 05/03/2012 07:28 AM, Richard Purdie wrote:
> On Thu, 2012-05-03 at 16:02 +0200, Koen Kooi wrote:
>> Op 3 mei 2012, om 15:48 heeft Wolfgang Denk het volgende geschreven:
>>
>>> With recent kernel versions, some ARM configurations need may fail to
>>> build with errors like this:
>>>
>>> 	multiple load addresses: 0x80008000 0x80008000
>>> 	This is incompatible with uImages
>>> 	Specify LOADADDR on the commandline to build an uImage
>>>
>>> We cannot pass this information in EXTRA_OEMAKE, as
>>> "meta/classes/kernel.bbclass" explicitly ignores all EXTRA_OEMAKE
>>> settings.  So add KERNEL_EXTRA_ARGS parameter so affected boards
>>> can add for example
>>>
>>> 	KERNEL_EXTRA_ARGS = "LOADADDR=0x80008000"
>>
>> Isn't KERNEL_EXTRA_OEMAKE clearer in this case? I see kernel args
>> being what ends up in /proc/cmdline.
> 
> In many ways I wish we could use EXTRA_OEMAKE and try and keep the API
> simpler. Looking at the code, I think it actually can work even with the
> existing code in some circumstances.
> 
> Whilst kernel.bbclass does zero out the contents, it does this simply to
> get rid of the default value (the -e MAKEARGS= bit).
> 
> The following recipe will therefore work:
> 
> """
> <some recipe code>
> 
> inherit kernel
> 
> EXTRA_OEMAKE += 'LOADADDR=0x80008000'
> """
> 
> but the problem is likely this can't be set from machine.conf.
> 
> I was wondering about changing the system so that in bitbake.conf we
> set:
> 
> OEMAKEDEFAULT = "-e MAKEFLAGS="
> EXTRA_OEMAKE = "${OEMAKEDEFAULT}"
> 
> and then kernel.bbclass can zero out OEMAKEDEFAULT. The trouble is you
> want to set:
> 
> EXTRA_OEMAKE_append_xxxx = " LOADADDR=0x80008000"
> 
> and I'm not coming up with a good value of xxxx other than
> pn-linux-xxxx :/. We could consider an extra override for the kernel
> case I guess.
> 
> I would prefer not to add mode global variables unless we can possibly
> help it...

I like the idea of reusing EXTRA_OEMAKE. Unfortunately, by the time we
have to add _append_pn-linux-yocto it seems like the benefit is lost and
I prefer Koen's KERNEL_EXTRA_OEMAKE suggestion.

--
Darren Hart
Intel Open Source Technology Center
Yocto Project - Linux Kernel

Patch

diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
index 139bad9..7a554f0 100644
--- a/meta/classes/kernel.bbclass
+++ b/meta/classes/kernel.bbclass
@@ -71,6 +71,9 @@  PACKAGE_ARCH = "${MACHINE_ARCH}"
 UBOOT_ENTRYPOINT ?= "20008000"
 UBOOT_LOADADDRESS ?= "${UBOOT_ENTRYPOINT}"
 
+# Some Linux kenrel configurations need additional parameters on the command line
+KERNEL_EXTRA_ARGS ?= ""
+
 # For the kernel, we don't want the '-e MAKEFLAGS=' in EXTRA_OEMAKE.
 # We don't want to override kernel Makefile variables from the environment
 EXTRA_OEMAKE = ""
@@ -82,7 +85,7 @@  KERNEL_IMAGETYPE_FOR_MAKE = "${@(lambda s: s[:-3] if s[-3:] == ".gz" else s)(d.g
 kernel_do_compile() {
 	unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE
 	oe_runmake include/linux/version.h CC="${KERNEL_CC}" LD="${KERNEL_LD}"
-	oe_runmake ${KERNEL_IMAGETYPE_FOR_MAKE} ${KERNEL_ALT_IMAGETYPE} CC="${KERNEL_CC}" LD="${KERNEL_LD}"
+	oe_runmake ${KERNEL_IMAGETYPE_FOR_MAKE} ${KERNEL_ALT_IMAGETYPE} CC="${KERNEL_CC}" LD="${KERNEL_LD}" ${KERNEL_EXTRA_ARGS}
 	if test "${KERNEL_IMAGETYPE_FOR_MAKE}.gz" = "${KERNEL_IMAGETYPE}"; then
 		gzip -9c < "${KERNEL_IMAGETYPE_FOR_MAKE}" > "${KERNEL_OUTPUT}"
 	fi