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: 10+ 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 ` [OE-core] " Richard Purdie
2011-03-25 14:14 ` Michael Jones
2011-03-25 14:55 ` Richard Purdie
2011-03-25 16:02 ` Michael Jones
2011-03-28 12:42 ` Richard Purdie
2011-03-28 16:39 ` Khem Raj
2011-04-07 13:03 ` Michael Jones
2011-04-06 15:47 ` 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox