[OE-core] 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-core
mailing list