[OE-core] [PATCH] kernel-yocto: do_kernel_configme: Fix silent sysroot poisoning error

Ioan-Adrian Ratiu adrian.ratiu at ni.com
Mon Aug 29 09:19:58 UTC 2016


do_kernel_configme calls merge_config.sh (installed in the sysroot by
the kern-tools-native recipe) which calls make to fill in any missing
symbols from the resulting merged config.

This errors out on my system because of sysroot poisoning [1]. Here is
a partial output from my .kernel-meta/cfg/merge_config_build.log (this
file is created in do_kernel_configme() while callig merge_config.sh):

make[1]: Entering directory '/media/adi/ssd/nilrt-master/build/tmp-glibc/work/x64-nilrt-linux/linux-nilrt/4.1+gitAUTOINC+a7e53ecc27-r0/linux-x64-standard-build'
  HOSTCC  scripts/basic/fixdep
/media/adi/ssd/nilrt-master/build/tmp-glibc/work-shared/x64/kernel-source/scripts/basic/fixdep.c:106:23: fatal error: sys/types.h: No such file or directory
compilation terminated.
make[2]: *** [/media/adi/ssd/nilrt-master/build/tmp-glibc/work-shared/x64/kernel-source/scripts/basic/Makefile:22: scripts/basic/x86_64-nilrt-linux-fixdep] Error 1

This issue is hard to debug because merge_config.sh does NOT check the
error output of its make call (this is added in the second patch) and
even though make errors out, the build continues as if nothing happened
and compiles a kernel with garbage configs (the .config generated by
do_kernel_configme is empty and gets filled later) which doesn't boot.

Adding $TOOLCHAIN_OPTIONS to $CFLAGS before calling merge_configs.sh
fixes the error because $TOOLCHAIN_OPTIONS defines the sysroot and make
uses it to correctly compile & fill all missing kernel config options.

[1] http://lists.openembedded.org/pipermail/openembedded-core/2014-October/098253.html

Signed-off-by: Ioan-Adrian Ratiu <adrian.ratiu at ni.com>
---
 meta/classes/kernel-yocto.bbclass | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/meta/classes/kernel-yocto.bbclass b/meta/classes/kernel-yocto.bbclass
index 8650e55..4397a9d 100644
--- a/meta/classes/kernel-yocto.bbclass
+++ b/meta/classes/kernel-yocto.bbclass
@@ -249,7 +249,7 @@ do_kernel_configme() {
 		bbfatal_log "Could not find configuration queue (${meta_dir}/config.queue)"
 	fi
 
-	ARCH=${ARCH} merge_config.sh -O ${B} ${config_flags} ${configs} > ${meta_dir}/cfg/merge_config_build.log 2>&1
+	CFLAGS="${CFLAGS} ${TOOLCHAIN_OPTIONS}"	ARCH=${ARCH} merge_config.sh -O ${B} ${config_flags} ${configs} > ${meta_dir}/cfg/merge_config_build.log 2>&1
 	if [ $? -ne 0 ]; then
 		bbfatal_log "Could not configure ${KMACHINE}-${LINUX_KERNEL_TYPE}"
 	fi
-- 
2.9.3




More information about the Openembedded-core mailing list