Add KERNEL_EXTRA_ARGS parameter

Submitted by Wolfgang Denk on May 3, 2012, 1:48 p.m.

Details

Message ID 1336052928-30764-1-git-send-email-wd@denx.de
State New
Headers show

Commit Message

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(-)

Patch hide | download patch | download mbox

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

Comments

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