[OE-core] [PATCH] External modules fail to load due to unknown symbols
Richard Purdie
richard.purdie at linuxfoundation.org
Fri Jun 5 22:53:07 UTC 2015
On Fri, 2015-06-05 at 13:18 -0400, Amy Fong wrote:
> From da12fa5e6daca0c0b7bb15df030b1c79fbefa089 Mon Sep 17 00:00:00 2001
> From: Amy Fong <amy.fong at windriver.com>
> Date: Mon, 1 Jun 2015 13:16:20 -0400
> Subject: [PATCH] External modules fail to load due to unknown symbols
>
> When building external kernel modules, a failure can happen
> when the module has dependencies on other kernel modules.
> In such cases, the build looks at Module.symvers to do
> symbol lookups of the other kernel modules that it depends on.
>
> Module.symvers gets copied by do_shared_workdir
> after do_compile and Module.symvers gets updated during
> do_compile_kernelmodules.
>
> do_compile_kernelmodules is modified to explicitly copy Module.symvers
> to the shared workdir.
>
> Signed-off-by: Amy Fong <amy.fong at windriver.com>
> Signed-off-by: Bruce Ashfield <bruce.ashfield at windriver.com>
> ---
> meta/classes/kernel.bbclass | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
> index 4f22cde..4a177b1 100644
> --- a/meta/classes/kernel.bbclass
> +++ b/meta/classes/kernel.bbclass
> @@ -215,6 +215,14 @@ do_compile_kernelmodules() {
> unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE
> if (grep -q -i -e '^CONFIG_MODULES=y$' .config); then
> oe_runmake ${PARALLEL_MAKE} modules CC="${KERNEL_CC}" LD="${KERNEL_LD}" ${KERNEL_EXTRA_ARGS}
> +
> + # Module.symvers gets updated during the
> + # building of the kernel modules. We need to
> + # update this in the shared workdir since some
> + # external kernel modules has a dependency on
> + # other kernel modules and will look at this
> + # file to do symbol lookups
> + cp Module.symvers ${STAGING_KERNEL_BUILDDIR}
> else
> bbnote "no modules to compile"
> fi
Sadly this will give rise to a race. shared_workdir is defined as:
addtask shared_workdir after do_compile before do_compile_kernelmodule
and other modules depend on the shared_workdir task. Your other modules
could therefore compile before the code in compile_kernelmodule has run.
At a guess you will next suggest we change shared_workdir to be after
compile_kernelmodules. The problem there is one of performance. We had
bug reports from the community and Wind River people about the fact that
shared_workdir executes when building kernel modules and doesn't come
from sstate. Forcing shared_workdir to run more tasks every time isn't
going to make people happy either :(
So I'm not sure how we solve this but it is going to need more thought
and the above patch isn't right.
Cheers,
Richard
More information about the Openembedded-core
mailing list