[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