[oe] staging & using kernel headers

Koen Kooi koen at dominion.thruhere.net
Fri Mar 18 09:55:22 UTC 2011


CC:ing oe-core since we have kernel.bbclass patches there as well.

Op 18 mrt 2011, om 10:49 heeft Michael Jones het volgende geschreven:

> Hello Koen & co.,
> 
> I recently bumped into a problem with recipes ti-dmai and gstreamer-ti
> when they included the kernel headers.  These headers were staged by
> kernel.bbclass sysroot_stage_all_append() with a lot of manual copying
> and manipulating links and such, rather than using 'oe_runmake
> headers_install'.  Back in October Koen explained this
> (http://article.gmane.org/gmane.comp.handhelds.openembedded/37772) is
> because some recipes use private kernel API.  The result of this with my
> 2.6.38 kernel

DMAI and gst-ti don't really work with anything newer than 2.6.32-psp, we're trying to get that addressed internally.

> is that I get a warning-turned-error from linux/types.h
> that "Attempt to use kernel headers from user space".
> 
> ti-dmai_svn.bb hacks this (self-admittedly) by defining
> _EXPORTED_HEADERS_ (commit d0184be13b4879e, also from Koen).  I had to
> modify the recipe to enable the define to actually get passed as a
> compile option.  For gstreamer-ti, there was no such hack in place, but
> it was needed for the same reason.
> 
> I would think it is a common requirement for recipes to include kernel
> headers, and this warning has been around since 2.6.32.  I got around it
> with gstreamer-ti by installing the headers with headers_install into a
> subdir of the headers directory set up currently by kernel.bbclass, and
> pointing the gstreamer-ti recipe at that, but I'm not sure if there's a
> better way.
> 
> If there are some recipes that need internal kernel sources staged for
> them, then it seems to me that we need both sets of kernel headers: one
> exported to userspace (with headers_install) and one that is not.
> Right?  Can we agree on a standard place/manner for this?
> 
> Below is my patch to get gstreamer-ti working, for illustration.

I don't really have a better suggestion, apart from adding a var in e.g. bitbake.conf to point to the userspace stuff.

We might even do the reverse, stage the full set into $kernel_dir/private and the userspace ones in $kernel_dir, that would make it more clear which recipes need internal API.

regards,

Koen

> 
> -Michael
> 
> From 71b3762ad5f6e7a8553a6b780296f7e994513f0b Mon Sep 17 00:00:00 2001
> From: Michael Jones <michael.jones at matrix-vision.de>
> Date: Thu, 17 Mar 2011 17:23:53 +0100
> Subject: [PATCH] install kernel headers exported for userspace
> 
> kernel.bbclass already copies and manipulates kernel headers into
> sysroot, but it doesn't export them properly using "make headers_install"
> which leads to a compiler error/warning in linux/types.h:
> 
> "Attempt to use kernel headers from user space, see
> http://kernelnewbies.org/KernelHeaders"
> 
> ---
> classes/kernel.bbclass      |    5 +++++
> recipes/ti/gstreamer-ti.inc |    2 +-
> 2 files changed, 6 insertions(+), 1 deletions(-)
> 
> diff --git a/classes/kernel.bbclass b/classes/kernel.bbclass
> index 422bcd7..6b46d51 100644
> --- a/classes/kernel.bbclass
> +++ b/classes/kernel.bbclass
> @@ -210,6 +210,11 @@ sysroot_stage_all_append() {
> 	[ -e Module.symvers ] && install -m 0644 Module.symvers $kerneldir/
> 
> 	cp -fR scripts $kerneldir/
> +
> +	# install kernel headers in the proper manner to export them
> +	# for userspace programs
> +	userspace_hdrs=${kerneldir}/userspace
> +	oe_runmake headers_install INSTALL_HDR_PATH=${userspace_hdrs} ARCH=${ARCH}
> }
> 
> kernel_do_configure() {
> diff --git a/recipes/ti/gstreamer-ti.inc b/recipes/ti/gstreamer-ti.inc
> index 905e192..04d990f 100644
> --- a/recipes/ti/gstreamer-ti.inc
> +++ b/recipes/ti/gstreamer-ti.inc
> @@ -72,7 +72,7 @@ CPPFLAGS_append = " -DPlatform_${PLATFORM}"
> export ENCODE_COMBO    = "${installdir}/ti-codecs-server/encodeCombo.x64P"
> export DECODE_COMBO    = "${installdir}/ti-codecs-server/decodeCombo.x64P"
> # Makefile also expects to be able to find the kernel headers from the envirionment
> -export LINUXKERNEL_INSTALL_DIR = "${STAGING_KERNEL_DIR}"
> +export LINUXKERNEL_INSTALL_DIR = "${STAGING_KERNEL_DIR}/userspace"
> 
> do_configure_prepend() {
> 	# PSP kernel is based on older DSS. we need to replace linux/omapfb.h with mach/omapfb.h
> -- 
> 1.7.4.1
> 
> 
> MATRIX VISION GmbH, Talstrasse 16, DE-71570 Oppenweiler
> Registergericht: Amtsgericht Stuttgart, HRB 271090
> Geschaeftsfuehrer: Gerhard Thullner, Werner Armingeon, Uwe Furtner





More information about the Openembedded-devel mailing list