From: Denys Dmytriyenko <denis@denix.org>
To: "André Draszik" <git@andred.net>
Cc: openembedded-core@lists.openembedded.org
Subject: Re: [PATCH v2 1/3] module.bbclass: use Module.symvers for dependants
Date: Wed, 16 Nov 2016 15:18:36 -0500 [thread overview]
Message-ID: <20161116201836.GA26131@denix.org> (raw)
In-Reply-To: <20160818075626.15973-2-git@andred.net>
On Thu, Aug 18, 2016 at 08:56:24AM +0100, André Draszik wrote:
> When compiling multiple external kernel modules, where one
> depends on the other, there are two problems at the
> moment:
> 1) we get compile time warnings from the kernel build
> system due to missing symbols (from modpost).
> 2) Any modules generated are missing dependency
> information (in the .modinfo elf section) for any
> dependencies outside the current source tree and
> outside the kernel itself.
>
> This is expected, but the kernel build system has a way to
> deal with this - the dependent module is expected to
> specify KBUILD_EXTRA_SYMBOLS (as a space-separated list)
> to point to any and all Module.symvers of kernel modules
> that are dependencies.
>
> While 1) by itself is not really a big issue, 2) prevents
> the packaging process from generating cross-source tree
> package dependencies.
>
> As a first step to solve the missing dependencies in
> packages created, we:
> 1) install Module.symvers of all external kernel module
> builds (into a location that is automatically packaged
> into the -dev package)
> 2) make use of KBUILD_EXTRA_SYMBOLS and pass the location
> of all Module.symvers of all kernel-module-* packages
> we depend on
>
> This solves both problems mentioned above.
>
> Signed-off-by: André Draszik <git@andred.net>
> ---
> meta/classes/module.bbclass | 15 +++++++++++++++
> 1 file changed, 15 insertions(+)
>
> diff --git a/meta/classes/module.bbclass b/meta/classes/module.bbclass
> index 01c9309..68e3d34 100644
> --- a/meta/classes/module.bbclass
> +++ b/meta/classes/module.bbclass
> @@ -8,6 +8,15 @@ EXTRA_OEMAKE += "KERNEL_SRC=${STAGING_KERNEL_DIR}"
>
> MODULES_INSTALL_TARGET ?= "modules_install"
>
> +python __anonymous () {
> + depends = d.getVar('DEPENDS', True)
> + extra_symbols = []
> + for dep in depends.split():
> + if dep.startswith("kernel-module-"):
> + extra_symbols.append("${STAGING_INCDIR}/" + dep + "/Module.symvers")
> + d.setVar('KBUILD_EXTRA_SYMBOLS', " ".join(extra_symbols))
> +}
> +
> module_do_compile() {
> unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
> oe_runmake KERNEL_PATH=${STAGING_KERNEL_DIR} \
> @@ -15,6 +24,7 @@ module_do_compile() {
> CC="${KERNEL_CC}" LD="${KERNEL_LD}" \
> AR="${KERNEL_AR}" \
> O=${STAGING_KERNEL_BUILDDIR} \
> + KBUILD_EXTRA_SYMBOLS="${KBUILD_EXTRA_SYMBOLS}" \
> ${MAKE_TARGETS}
> }
>
> @@ -24,6 +34,11 @@ module_do_install() {
> CC="${KERNEL_CC}" LD="${KERNEL_LD}" \
> O=${STAGING_KERNEL_BUILDDIR} \
> ${MODULES_INSTALL_TARGET}
> +
> + install -d -m0755 ${D}${includedir}/${BPN}
> + cp -a --no-preserve=ownership ${B}/Module.symvers ${D}${includedir}/${BPN}
Hmm, why is Module.symvers expected to be in the root of ${B}? This seems like
a very artificial assumption/requirement!
I have some out-of-tree modules with complicated hierarchies and it worked
fine so far until this change, because there were only 2 well defined
interfaces - make ${MAKE_TARGETS} and make ${MODULES_INSTALL_TARGET} - and
both of them know where the resulting module .ko resides deep inside ${B}
hierarchy.
I wonder if this should have been rolled into ${MODULES_INSTALL_TARGET}
step...
--
Denys
> + # it doesn't actually seem to matter which path is specified here
> + sed -e 's:${B}/::g' -i ${D}${includedir}/${BPN}/Module.symvers
> }
>
> EXPORT_FUNCTIONS do_compile do_install
> --
> 2.9.3
>
> --
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core@lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core
next prev parent reply other threads:[~2016-11-16 20:18 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-17 15:25 [PATCH 0/2] fixing kernel module cross-recipe dependency André Draszik
2016-08-17 15:25 ` [PATCH 1/2] module.bbclass: use Module.symvers for dependants André Draszik
2016-08-17 15:25 ` [PATCH 2/2] kernel-module-split.bbclass: generate dependencies across recipes André Draszik
2016-08-17 16:12 ` [PATCH] kernel-module-split.bbclass: no need for running depmod André Draszik
2016-08-18 7:56 ` [PATCH v2 0/3] fixing kernel module cross-recipe dependency André Draszik
2016-08-18 7:56 ` [PATCH v2 1/3] module.bbclass: use Module.symvers for dependants André Draszik
2016-11-16 20:18 ` Denys Dmytriyenko [this message]
2016-11-17 10:22 ` André Draszik
2016-11-17 18:47 ` Denys Dmytriyenko
2016-08-18 7:56 ` [PATCH v2 2/3] kernel-module-split.bbclass: generate dependencies across recipes André Draszik
2016-08-18 7:56 ` [PATCH v2 3/3] kernel-module-split.bbclass: no need for running depmod André Draszik
2016-08-26 10:38 ` [PATCH v2 0/3] fixing kernel module cross-recipe dependency André Draszik
2016-09-05 11:18 ` André Draszik
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=20161116201836.GA26131@denix.org \
--to=denis@denix.org \
--cc=git@andred.net \
--cc=openembedded-core@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