From: Michael Jones <michael.jones@matrix-vision.de>
To: openembedded-devel@lists.openembedded.org, koen@dominion.thruhere.net
Subject: staging & using kernel headers
Date: Fri, 18 Mar 2011 10:49:24 +0100 [thread overview]
Message-ID: <4D832AA4.1020701@matrix-vision.de> (raw)
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 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.
-Michael
From 71b3762ad5f6e7a8553a6b780296f7e994513f0b Mon Sep 17 00:00:00 2001
From: Michael Jones <michael.jones@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
next reply other threads:[~2011-03-18 9:57 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-18 9:49 Michael Jones [this message]
2011-03-18 9:55 ` staging & using kernel headers Koen Kooi
2011-03-25 13:38 ` Richard Purdie
2011-03-25 13:38 ` [OE-core] " Richard Purdie
2011-03-25 14:14 ` Michael Jones
2011-03-25 14:14 ` [OE-core] " Michael Jones
2011-03-25 14:55 ` Richard Purdie
2011-03-25 14:55 ` [OE-core] " Richard Purdie
2011-03-25 16:02 ` Michael Jones
2011-03-25 16:02 ` [OE-core] " Michael Jones
2011-03-28 12:42 ` [oe] " Richard Purdie
2011-03-28 12:42 ` [OE-core] " Richard Purdie
2011-03-28 16:39 ` [oe] " Khem Raj
2011-03-28 16:39 ` [OE-core] " Khem Raj
2011-04-07 13:03 ` [oe] " Michael Jones
2011-04-07 13:03 ` [OE-core] " Michael Jones
2011-04-06 15:47 ` [oe] " Michael Jones
2011-04-06 15:47 ` [OE-core] " Michael Jones
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4D832AA4.1020701@matrix-vision.de \
--to=michael.jones@matrix-vision.de \
--cc=koen@dominion.thruhere.net \
--cc=openembedded-devel@lists.openembedded.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.