[OE-core] [PATCH 1/4] kernel-yocto.bbclass: set KERNEL_LD also for merge_config.sh
Bruce Ashfield
bruce.ashfield at gmail.com
Wed Feb 5 04:00:25 UTC 2020
On Tue, Feb 4, 2020 at 10:03 PM Bruce Ashfield <bruce.ashfield at gmail.com> wrote:
>
> On Tue, Feb 4, 2020 at 9:42 PM Martin Jansa <martin.jansa at gmail.com> wrote:
> >
> > * when ld-is-gold is used, merge_config.sh silently fails and doesn't generate anything
> > useful in .config (and also include directory isn't created):
> >
> > tmp-glibc-bfd-qemux86-do_kernel_configme/work/qemux86-oe-linux/linux-yocto/5.4.15-r0/linux-qemux86-standard-build:
> > total 164K
> > drwxr-xr-x 4 martin martin 4.0K Feb 5 02:27 .
> > drwxrwxr-x 7 martin martin 4.0K Feb 5 02:27 ..
> > -rw-rw-r-- 1 martin martin 133K Feb 5 02:28 .config
> > -rw-rw-r-- 1 martin martin 39 Feb 5 02:27 .gitignore
> > drwxr-xr-x 4 martin martin 4.0K Feb 5 02:27 include
> > -rw-rw-r-- 1 martin martin 201 Feb 5 02:27 Makefile
> > drwxrwxr-x 4 martin martin 4.0K Feb 5 02:27 scripts
> > lrwxrwxrwx 1 martin martin 61 Feb 5 02:27 source -> /OE/build/oe-core/tmp-glibc/work-shared/qemux86/kernel-source
> >
> > tmp-glibc-gold-qemux86-do_kernel_configme/work/qemux86-oe-linux/linux-yocto/5.4.15-r0/linux-qemux86-standard-build:
> > total 28K
> > drwxr-xr-x 3 martin martin 4.0K Feb 5 02:26 .
> > drwxrwxr-x 7 martin martin 4.0K Feb 5 02:26 ..
> > -rw-rw-r-- 1 martin martin 74 Feb 5 02:26 .config
> > -rw-rw-r-- 1 martin martin 39 Feb 5 02:26 .gitignore
> > -rw-rw-r-- 1 martin martin 201 Feb 5 02:26 Makefile
> > drwxrwxr-x 4 martin martin 4.0K Feb 5 02:26 scripts
> > lrwxrwxrwx 1 martin martin 61 Feb 5 02:26 source -> /OE/build/oe-core/tmp-glibc/work-shared/qemux86/kernel-source
> >
> > $ cat tmp-glibc-gold-qemux86-do_kernel_configme/work/qemux86-oe-linux/linux-yocto/5.4.15-r0/linux-qemux86-standard-build/.config
> > CONFIG_LOCALVERSION="-yocto-standard"
> >
> > * and because the failure is silent, it will happily start building
> > kernel with default defconfig, which even builds OK for qemux86-64
> > but on qemux86 I've noticed this issue, because incorrectly
> > configured kernel build fails with:
> >
> > $ tail -n 20 tmp-glibc-gold-qemux86/work/qemux86-oe-linux/linux-yocto/5.4.15-r0/temp/log.do_compile
> > LD /OE/build/oe-core/tmp-glibc/work/qemux86-oe-linux/linux-yocto/5.4.15-r0/linux-qemux86-standard-build/tools/objtool/libsubcmd-in.o
> > AR /OE/build/oe-core/tmp-glibc/work/qemux86-oe-linux/linux-yocto/5.4.15-r0/linux-qemux86-standard-build/tools/objtool/libsubcmd.a
> > HOSTCC scripts/mod/mk_elfconfig
> > CC scripts/mod/devicetable-offsets.s
> > CC scripts/mod/empty.o
> > cc1: error: code model 'kernel' not supported in the 32 bit mode
> > cc1: sorry, unimplemented: 64-bit mode not compiled in
> > make[2]: *** [/OE/build/oe-core/tmp-glibc/work-shared/qemux86/kernel-source/scripts/Makefile.build:99: scripts/mod/devicetable-offsets.s] Error 1
> > make[2]: *** Waiting for unfinished jobs....
> > cc1: error: code model 'kernel' not supported in the 32 bit mode
> > cc1: sorry, unimplemented: 64-bit mode not compiled in
> > make[2]: *** [/OE/build/oe-core/tmp-glibc/work-shared/qemux86/kernel-source/scripts/Makefile.build:266: scripts/mod/empty.o] Error 1
> > make[1]: *** [/OE/build/oe-core/tmp-glibc/work-shared/qemux86/kernel-source/Makefile:1111: prepare0] Error 2
> > make[1]: *** Waiting for unfinished jobs....
> > LD /OE/build/oe-core/tmp-glibc/work/qemux86-oe-linux/linux-yocto/5.4.15-r0/linux-qemux86-standard-build/tools/objtool/objtool-in.o
> > /OE/build/oe-core/tmp-glibc/work-shared/qemux86/kernel-source/tools/objtool
> > LINK /OE/build/oe-core/tmp-glibc/work/qemux86-oe-linux/linux-yocto/5.4.15-r0/linux-qemux86-standard-build/tools/objtool/objtool
> > make: *** [/OE/build/oe-core/tmp-glibc/work-shared/qemux86/kernel-source/Makefile:179: sub-make] Error 2
> > WARNING: exit code 1 from a shell command.
> >
> > * the issue happens in log.do_kernel_configme, but the log is completely useless:
> >
> > cat tmp-glibc-gold-qemux86-do_kernel_configme/work/qemux86-oe-linux/linux-yocto/5.4.15-r0/temp/log.do_kernel_configme
> > DEBUG: Executing python function extend_recipe_sysroot
> > NOTE: Direct dependencies are ['virtual:native:/OE/build/oe-core/openembedded-core/meta/recipes-devtools/bison/bison_3.5.bb:do_populate_sysroot', '/OE/build/oe-core/openembedded-core/meta/recipes-kernel/kern-tools/kern-tools-native_git.bb:do_populate_sysroot', 'virtual:native:/OE/build/oe-core/openembedded-core/meta/recipes-extended/bc/bc_1.07.1.bb:do_populate_sysroot', '/OE/build/oe-core/openembedded-core/meta/recipes-devtools/binutils/binutils-cross_2.33.bb:do_populate_sysroot', '/OE/build/oe-core/openembedded-core/meta/recipes-devtools/quilt/quilt-native_0.66.bb:do_populate_sysroot', '/OE/build/oe-core/openembedded-core/meta/recipes-devtools/gcc/gcc-cross_9.2.bb:do_populate_sysroot']
> > NOTE: Installed into sysroot: ['bison-native', 'bc-native', 'binutils-cross-i686', 'gcc-cross-i686', 'autoconf-native', 'xz-native', 'flex-native', 'gnu-config-native', 'automake-native', 'libtool-native', 'texinfo-dummy-native', 'gettext-minimal-native', 'readline-native', 'zlib-native', 'gmp-native', 'libmpc-native', 'mpfr-native', 'linux-libc-headers', 'm4-native', 'ncurses-native', 'pkgconfig-native']
> > NOTE: Skipping as already exists in sysroot: ['kern-tools-native', 'quilt-native']
> > DEBUG: sed -e 's:^[^/]*/:/OE/build/oe-core/tmp-glibc/work/qemux86-oe-linux/linux-yocto/5.4.15-r0/recipe-sysroot-native/:g' /OE/build/oe-core/tmp-glibc/sysroots-components/x86_64/bison-native/fixmepath /OE/build/oe-core/tmp-glibc/sysroots-components/x86_64/gcc-cross-i686/fixmepath /OE/build/oe-core/tmp-glibc/sysroots-components/x86_64/autoconf-native/fixmepath /OE/build/oe-core/tmp-glibc/sysroots-components/x86_64/gnu-config-native/fixmepath /OE/build/oe-core/tmp-glibc/sysroots-components/x86_64/automake-native/fixmepath /OE/build/oe-core/tmp-glibc/sysroots-components/x86_64/libtool-native/fixmepath /OE/build/oe-core/tmp-glibc/sysroots-components/x86_64/gmp-native/fixmepath /OE/build/oe-core/tmp-glibc/sysroots-components/x86_64/ncurses-native/fixmepath /OE/build/oe-core/tmp-glibc/sysroots-components/x86_64/pkgconfig-native/fixmepath | xargs sed -i -e 's:FIXMESTAGINGDIRTARGET:/OE/build/oe-core/tmp-glibc/work/qemux86-oe-linux/linux-yocto/5.4.15-r0/recipe-sysroot:g; s:FIXMESTAGINGDIRHOST:/OE/build/oe-core/tmp-glibc/work/qemux86-oe-linux/linux-yocto/5.4.15-r0/recipe-sysroot-native:g' -e 's:FIXME_PSEUDO_SYSROOT:/OE/build/oe-core/tmp-glibc/sysroots-components/x86_64/pseudo-native:g' -e 's:FIXME_HOSTTOOLS_DIR:/OE/build/oe-core/tmp-glibc/hosttools:g' -e 's:FIXME_PKGDATA_DIR:/OE/build/oe-core/tmp-glibc/pkgdata/qemux86:g' -e 's:FIXME_PSEUDO_LOCALSTATEDIR:/OE/build/oe-core/tmp-glibc/work/qemux86-oe-linux/linux-yocto/5.4.15-r0/pseudo/:g' -e 's:FIXME_LOGFIFO:/OE/build/oe-core/tmp-glibc/work/qemux86-oe-linux/linux-yocto/5.4.15-r0/temp/fifo.10476:g'
> > DEBUG: Python function extend_recipe_sysroot finished
> > DEBUG: Executing shell function do_kernel_configme
> > DEBUG: Shell function do_kernel_configme finished
> >
> > ]because merge_config.sh is redirected to work-shared/qemux86/kernel-source/.kernel-meta/cfg/merge_config_build.log
> > and bbfatal_log called in do_kernel_configme only when merge_config.sh fails which it should in this case
> > but doesn't.
> >
> > The merge_config_build.log shows 5.4 specific error:
> > scripts/Kconfig.include:39: gold linker 'i686-oe-linux-ld' not supported
> > but then it happily continues reporting what isn't applied in not created
> > .config file
> >
> > --- tmp-glibc-bfd-qemux86-do_kernel_configme/work-shared/qemux86/kernel-source/.kernel-meta/cfg/merge_config_build.log 2020-02-05 02:28:01.455520207 +0100
> > +++ tmp-glibc-gold-qemux86-do_kernel_configme/work-shared/qemux86/kernel-source/.kernel-meta/cfg/merge_config_build.log 2020-02-05 02:26:30.656470909 +0100
> > @@ -171,586 +171,5113 @@
> > HOSTCC scripts/kconfig/symbol.o
> > HOSTLD scripts/kconfig/conf
> > scripts/kconfig/conf --alldefconfig Kconfig
> > -./.tmp.config.jDjIEYi9Yq:2208:warning: unexpected data: #
> > -./.tmp.config.jDjIEYi9Yq:2209:warning: unexpected data: # Generic Driver Options
> > -./.tmp.config.jDjIEYi9Yq:2210:warning: unexpected data: #
> > -./.tmp.config.jDjIEYi9Yq:3102:warning: symbol value 'm' invalid for SAMPLE_SECCOMP
> > -./.tmp.config.jDjIEYi9Yq:3119:warning: symbol value 'm' invalid for NF_CT_PROTO_GRE
> > -./.tmp.config.jDjIEYi9Yq:3120:warning: symbol value 'm' invalid for NF_CT_PROTO_SCTP
> > -./.tmp.config.jDjIEYi9Yq:3121:warning: symbol value 'm' invalid for NF_CT_PROTO_UDPLITE
> > -#
> > -# configuration written to .config
> > -#
> > +scripts/Kconfig.include:39: gold linker 'i686-oe-linux-ld' not supported
> > +make[2]: *** [/OE/build/oe-core/tmp-glibc/work-shared/qemux86/kernel-source/scripts/kconfig/Makefile:73: alldefconfig] Error 1
> > +make[1]: *** [/OE/build/oe-core/tmp-glibc/work-shared/qemux86/kernel-source/Makefile:567: alldefconfig] Error 2
> > make[1]: Leaving directory '/OE/build/oe-core/tmp-glibc/work/qemux86-oe-linux/linux-yocto/5.4.15-r0/linux-qemux86-standard-build'
> > +make: *** [Makefile:179: sub-make] Error 2
> > +grep: /OE/build/oe-core/tmp-glibc/work/qemux86-oe-linux/linux-yocto/5.4.15-r0/linux-qemux86-standard-build/.config: No such file or directory
> > +Value requested for CONFIG_LOCALVERSION not in final .config
> > +Requested value: CONFIG_LOCALVERSION=""
> > +Actual value:
> > +
> > +grep: /OE/build/oe-core/tmp-glibc/work/qemux86-oe-linux/linux-yocto/5.4.15-r0/linux-qemux86-standard-build/.config: No such file or directory
> > +Value requested for CONFIG_LOCALVERSION_AUTO not in final .config
> > +Requested value: # CONFIG_LOCALVERSION_AUTO is not set
> > +Actual value:
> >
> > * I don't know why merge_config.sh uses separate more difficult to find merge_config_build.log
> > instead of leaving the output to end in log.do_kernel_configme, I'll send it as separate
> > commit so that it can be discussed there.
>
> That's because there's a LOT of noise in the merge_config log, the
> separate task for doing the audit has heuristics to highlight
> important errors, and allows configuration fragments to override each
> other, have optional fragments, etc.
But of course, just allowing stderr into the log makes sense, since
the fragment messages themselves are stdout. That way we can show any
future traps/failures in the single log, and the audit step can offer
some more nuanced processing of the output.
I pulled together a patch that splits the output, and another value
for the log level that will allow everything into logs .. and am
running them through tests now.
Cheers,
Bruce
>
> I already have the various audit level variables in use for
> linux-yocto style kernels, at the highest level it could be dumped,
> but absolutely not by default.
>
> Cheers,
>
> Bruce
>
> >
> > Signed-off-by: Martin Jansa <Martin.Jansa at gmail.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 141eeafeb9..d2796b01bf 100644
> > --- a/meta/classes/kernel-yocto.bbclass
> > +++ b/meta/classes/kernel-yocto.bbclass
> > @@ -345,7 +345,7 @@ do_kernel_configme() {
> > bbfatal_log "Could not find configuration queue (${meta_dir}/config.queue)"
> > fi
> >
> > - CFLAGS="${CFLAGS} ${TOOLCHAIN_OPTIONS}" HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" HOSTCPP="${BUILD_CPP}" CC="${KERNEL_CC}" ARCH=${ARCH} merge_config.sh -O ${B} ${config_flags} ${configs} > ${meta_dir}/cfg/merge_config_build.log 2>&1
> > + CFLAGS="${CFLAGS} ${TOOLCHAIN_OPTIONS}" HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" HOSTCPP="${BUILD_CPP}" CC="${KERNEL_CC}" LD="${KERNEL_LD}" 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.20.1
> >
>
>
> --
> - Thou shalt not follow the NULL pointer, for chaos and madness await
> thee at its end
> - "Use the force Harry" - Gandalf, Star Trek II
--
- Thou shalt not follow the NULL pointer, for chaos and madness await
thee at its end
- "Use the force Harry" - Gandalf, Star Trek II
More information about the Openembedded-core
mailing list