[yocto] How to select defconfig for kernel build with yocto/bitbake

Dr. Markus Eich markus.eich at dfki.de
Wed Jul 9 05:41:47 PDT 2014


bitbake -e produces the following output. I have listed the methods 
dealing with .config.



do_kernel_configme() {
     echo "[INFO] doing kernel configme"
     export KMETA=${KMETA}

     if [ -n ${KCONFIG_MODE} ]; then
         configmeflags=${KCONFIG_MODE}
     else
         # If a defconfig was passed, use =n as the baseline, which is 
achieved
         # via --allnoconfig
         if [ -f 
/home/eich/odroid/build/tmp/work/odroid_xu-poky-linux-gnueabi/linux-hardkernel/3.4.91+gitrAUTOINC+a26607bfa2-r0/defconfig 
]; then
             configmeflags="--allnoconfig"
         fi
     fi

     cd 
/home/eich/odroid/build/tmp/work/odroid_xu-poky-linux-gnueabi/linux-hardkernel/3.4.91+gitrAUTOINC+a26607bfa2-r0/git
PATH=/home/eich/yocto/poky/scripts:/home/eich/odroid/build/tmp/sysroots/x86_64-linux/usr/bin/armv7a-vfp-neon-poky-linux-gnueabi:/home/eich/odroid/build/tmp/sysroots/odroid-xu/usr/bin/crossscripts:/home/eich/odroid/build/tmp/sysroots/x86_64-linux/usr/sbin:/home/eich/odroid/build/tmp/sysroots/x86_64-linux/usr/bin:/home/eich/odroid/build/tmp/sysroots/x86_64-linux/sbin:/home/eich/odroid/build/tmp/sysroots/x86_64-linux/bin:/home/eich/yocto/poky/scripts:/home/eich/yocto/poky/bitbake/bin:/home/eich/ros_catkin_ws/install_isolated/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/eich/bin:/usr/local/java/jre1.7.0_55/bin:/home/eich/install/bin:/opt/toolchains/arm-eabi-4.6/bin:/home/eich/odroid/build/tmp/work/odroid_xu-poky-linux-gnueabi/linux-hardkernel/3.4.91+gitrAUTOINC+a26607bfa2-r0/git/scripts/util
     configme ${configmeflags} --reconfig --output 
/home/eich/odroid/build/tmp/work/odroid_xu-poky-linux-gnueabi/linux-hardkernel/3.4.91+gitrAUTOINC+a26607bfa2-r0/linux-odroid_xu-standard-build 
standard odroid-xu
     if [ $? -ne 0 ]; then
         echo "ERROR. Could not configure odroid-xu-standard"
         exit 1
     fi

     echo "# Global settings from linux recipe" >> 
/home/eich/odroid/build/tmp/work/odroid_xu-poky-linux-gnueabi/linux-hardkernel/3.4.91+gitrAUTOINC+a26607bfa2-r0/linux-odroid_xu-standard-build/.config
     echo "CONFIG_LOCALVERSION="\"-custom\" >> 
/home/eich/odroid/build/tmp/work/odroid_xu-poky-linux-gnueabi/linux-hardkernel/3.4.91+gitrAUTOINC+a26607bfa2-r0/linux-odroid_xu-standard-build/.config

}


do_compile_kernelmodules() {
     unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE
     if (grep -q -i -e '^CONFIG_MODULES=y$' .config); then
         oe_runmake -j 4 modules CC="arm-poky-linux-gnueabi-gcc 
-mno-thumb-interwork -marm" LD="arm-poky-linux-gnueabi-ld.bfd  "
     else
         bbnote "no modules to compile"
     fi

}

kernel_do_configure() {
     # fixes extra + in /lib/modules/2.6.37+
     # $ scripts/setlocalversion . => +
     # $ make kernelversion => 2.6.37
     # $ make kernelrelease => 2.6.37+
     touch 
/home/eich/odroid/build/tmp/work/odroid_xu-poky-linux-gnueabi/linux-hardkernel/3.4.91+gitrAUTOINC+a26607bfa2-r0/linux-odroid_xu-standard-build/.scmversion 
/home/eich/odroid/build/tmp/work/odroid_xu-poky-linux-gnueabi/linux-hardkernel/3.4.91+gitrAUTOINC+a26607bfa2-r0/git/.scmversion

     # Copy defconfig to .config if .config does not exist. This allows
     # recipes to manage the .config themselves in do_configure_prepend().
     if [ -f 
"/home/eich/odroid/build/tmp/work/odroid_xu-poky-linux-gnueabi/linux-hardkernel/3.4.91+gitrAUTOINC+a26607bfa2-r0/defconfig" 
] && [ ! -f 
"/home/eich/odroid/build/tmp/work/odroid_xu-poky-linux-gnueabi/linux-hardkernel/3.4.91+gitrAUTOINC+a26607bfa2-r0/linux-odroid_xu-standard-build/.config" 
]; then
         cp 
"/home/eich/odroid/build/tmp/work/odroid_xu-poky-linux-gnueabi/linux-hardkernel/3.4.91+gitrAUTOINC+a26607bfa2-r0/defconfig" 
"/home/eich/odroid/build/tmp/work/odroid_xu-poky-linux-gnueabi/linux-hardkernel/3.4.91+gitrAUTOINC+a26607bfa2-r0/linux-odroid_xu-standard-build/.config"
     fi
     eval oe_runmake_call oldnoconfig || yes '' | oe_runmake oldconfig
     install -m 0644 
/home/eich/odroid/build/tmp/work/odroid_xu-poky-linux-gnueabi/linux-hardkernel/3.4.91+gitrAUTOINC+a26607bfa2-r0/git/arch/arm/configs/odroidxu_ubuntu_defconfig 
/home/eich/odroid/build/tmp/work/odroid_xu-poky-linux-gnueabi/linux-hardkernel/3.4.91+gitrAUTOINC+a26607bfa2-r0/defconfig
     install -m 0644 
/home/eich/odroid/build/tmp/work/odroid_xu-poky-linux-gnueabi/linux-hardkernel/3.4.91+gitrAUTOINC+a26607bfa2-r0/git/arch/arm/configs/odroidxu_ubuntu_defconfig 
/home/eich/odroid/build/tmp/work/odroid_xu-poky-linux-gnueabi/linux-hardkernel/3.4.91+gitrAUTOINC+a26607bfa2-r0/git/.config

}


kernel_do_install() {
     #
     # First install the modules
     #    unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE
     if (grep -q -i -e '^CONFIG_MODULES=y$' .config); then
         oe_runmake DEPMOD=echo 
INSTALL_MOD_PATH="/home/eich/odroid/build/tmp/work/odroid_xu-poky-linux-gnueabi/linux-hardkernel/3.4.91+gitrAUTOINC+a26607bfa2-r0/image" 
modules_install
         rm 
"/home/eich/odroid/build/tmp/work/odroid_xu-poky-linux-gnueabi/linux-hardkernel/3.4.91+gitrAUTOINC+a26607bfa2-r0/image/lib/modules/None/build"
         rm 
"/home/eich/odroid/build/tmp/work/odroid_xu-poky-linux-gnueabi/linux-hardkernel/3.4.91+gitrAUTOINC+a26607bfa2-r0/image/lib/modules/None/source"
         # If the kernel/ directory is empty remove it to prevent QA issues
         rmdir --ignore-fail-on-non-empty 
"/home/eich/odroid/build/tmp/work/odroid_xu-poky-linux-gnueabi/linux-hardkernel/3.4.91+gitrAUTOINC+a26607bfa2-r0/image/lib/modules/None/kernel"
     else
         bbnote "no modules to install"
     fi

     #
     # Install various kernel output (zImage, map file, config, module 
support files)
     #
     install -d 
/home/eich/odroid/build/tmp/work/odroid_xu-poky-linux-gnueabi/linux-hardkernel/3.4.91+gitrAUTOINC+a26607bfa2-r0/image/boot
     install -d 
/home/eich/odroid/build/tmp/work/odroid_xu-poky-linux-gnueabi/linux-hardkernel/3.4.91+gitrAUTOINC+a26607bfa2-r0/image/boot
     install -m 0644 arch/arm/boot/uImage 
/home/eich/odroid/build/tmp/work/odroid_xu-poky-linux-gnueabi/linux-hardkernel/3.4.91+gitrAUTOINC+a26607bfa2-r0/image/boot/uImage-None
     install -m 0644 System.map 
/home/eich/odroid/build/tmp/work/odroid_xu-poky-linux-gnueabi/linux-hardkernel/3.4.91+gitrAUTOINC+a26607bfa2-r0/image/boot/System.map-None
     install -m 0644 .config 
/home/eich/odroid/build/tmp/work/odroid_xu-poky-linux-gnueabi/linux-hardkernel/3.4.91+gitrAUTOINC+a26607bfa2-r0/image/boot/config-None
     install -m 0644 vmlinux 
/home/eich/odroid/build/tmp/work/odroid_xu-poky-linux-gnueabi/linux-hardkernel/3.4.91+gitrAUTOINC+a26607bfa2-r0/image/boot/vmlinux-None
     [ -e Module.symvers ] && install -m 0644 Module.symvers 
/home/eich/odroid/build/tmp/work/odroid_xu-poky-linux-gnueabi/linux-hardkernel/3.4.91+gitrAUTOINC+a26607bfa2-r0/image/boot/Module.symvers-None
     install -d 
/home/eich/odroid/build/tmp/work/odroid_xu-poky-linux-gnueabi/linux-hardkernel/3.4.91+gitrAUTOINC+a26607bfa2-r0/image/etc/modules-load.d
     install -d 
/home/eich/odroid/build/tmp/work/odroid_xu-poky-linux-gnueabi/linux-hardkernel/3.4.91+gitrAUTOINC+a26607bfa2-r0/image/etc/modprobe.d

     #
     # Support for external module building - create a minimal copy of the
     # kernel source tree.
     #
kerneldir=/home/eich/odroid/build/tmp/work/odroid_xu-poky-linux-gnueabi/linux-hardkernel/3.4.91+gitrAUTOINC+a26607bfa2-r0/image/usr/src/kernel
     install -d $kerneldir

     #
     # Store the kernel version in sysroots for module-base.bbclass
     #

     echo "None" > $kerneldir/kernel-abiversion

     #
     # Store kernel image name to allow use during image generation
     #

     echo 
"uImage--3.4.91+gitrAUTOINC+a26607bfa2-r0-odroid-xu-20140709123549" 
 >$kerneldir/kernel-image-name

     #
     # Copy the entire source tree. In case an external build directory is
     # used, copy the build directory over first, then copy over the source
     # dir. This ensures the original Makefiles are used and not the
     # redirecting Makefiles in the build directory.
     #
     find . -depth -not -name "*.cmd" -not -name "*.o" -not -path 
"./Documentation*" -not -path "./source*" -not -path "./.*" -print0 | 
cpio --null -pdlu $kerneldir
     cp .config $kerneldir
     if [ 
"/home/eich/odroid/build/tmp/work/odroid_xu-poky-linux-gnueabi/linux-hardkernel/3.4.91+gitrAUTOINC+a26607bfa2-r0/git" 
!= 
"/home/eich/odroid/build/tmp/work/odroid_xu-poky-linux-gnueabi/linux-hardkernel/3.4.91+gitrAUTOINC+a26607bfa2-r0/linux-odroid_xu-standard-build" 
]; then
         pwd="$PWD"
         cd 
"/home/eich/odroid/build/tmp/work/odroid_xu-poky-linux-gnueabi/linux-hardkernel/3.4.91+gitrAUTOINC+a26607bfa2-r0/git"
         find . -depth -not -path "./Documentation*" -not -path "./.*" 
-print0 | cpio --null -pdlu $kerneldir
         cd "$pwd"
     fi

     # Test to ensure that the output file and image type are not actually
     # the same file. If hardlinking is used, they will be the same, and 
there's
     # no need to install.
     ! [ arch/arm/boot/uImage -ef $kerneldir/uImage ] && install -m 0644 
arch/arm/boot/uImage $kerneldir/uImage
     install -m 0644 System.map $kerneldir/System.map-None

     # Dummy Makefile so the clean below works
         mkdir $kerneldir/Documentation
         touch $kerneldir/Documentation/Makefile

     #
     # Clean and remove files not needed for building modules.
     # Some distributions go through a lot more trouble to strip out
     # unecessary headers, for now, we just prune the obvious bits.
     #
     # We don't want to leave host-arch binaries in /sysroots, so
     # we clean the scripts dir while leaving the generated config
     # and include files.
     #
     oe_runmake -C $kerneldir CC="arm-poky-linux-gnueabi-gcc 
-mno-thumb-interwork -marm" LD="arm-poky-linux-gnueabi-ld.bfd  " clean 
_mrproper_scripts

     # hide directories that shouldn't have their .c, s and S files deleted
     for d in tools scripts lib; do
         mv $kerneldir/$d $kerneldir/.$d
     done

     # delete .c, .s and .S files, unless we hid a directory as .<dir>. 
This technique is
     # much faster than find -prune and -exec
     find $kerneldir -not -path '*/\.*' -type f -name "*.[csS]" -delete

     # put the hidden dirs back
     for d in tools scripts lib; do
         mv $kerneldir/.$d $kerneldir/$d
     done

     # As of Linux kernel version 3.0.1, the clean target removes
     # arch/powerpc/lib/crtsavres.o which is present in
     # KBUILD_LDFLAGS_MODULE, making it required to build external modules.
     if [ arm = "powerpc" ]; then
         cp -l arch/powerpc/lib/crtsavres.o 
$kerneldir/arch/powerpc/lib/crtsavres.o
     fi

     # Necessary for building modules like compat-wireless.
     if [ -f include/generated/bounds.h ]; then
         cp -l include/generated/bounds.h 
$kerneldir/include/generated/bounds.h
     fi
     if [ -d arch/arm/include/generated ]; then
         mkdir -p $kerneldir/arch/arm/include/generated/
         cp -flR arch/arm/include/generated/* 
$kerneldir/arch/arm/include/generated/
     fi

     # Remove the following binaries which cause strip or arch QA errors
     # during do_package for cross-compiled platforms
     bin_files="arch/powerpc/boot/addnote arch/powerpc/boot/hack-coff \
                arch/powerpc/boot/mktree scripts/kconfig/zconf.tab.o \
            scripts/kconfig/conf.o scripts/kconfig/kxgettext.o"
     for entry in $bin_files; do
         rm -f $kerneldir/$entry
     done

     # kernels <2.6.30 don't have $kerneldir/tools directory so we check 
if it exists before calling sed
     if [ -f $kerneldir/tools/perf/Makefile ]; then
         # Fix SLANG_INC for slang.h
         sed -i 's#-I/usr/include/slang#-I=/usr/include/slang#g' 
$kerneldir/tools/perf/Makefile
     fi

}





On 09.07.2014 14:29, Sathish Kumar Balasubramaniam -ERS, HCL Tech wrote:
> Sorry, Markus.
> Ignore my previous post. It has error.
>
> I think you need to check the output of "bitbake -e <recipe name>" and see how the .config file is created for your recipe.
> Based on that only we need to update the recipe.
>
> Regards,
> B.Sathish Kumar
>
> -----Original Message-----
> From: Sathish Kumar Balasubramaniam -ERS, HCL Tech
> Sent: Wednesday, July 09, 2014 5:54 PM
> To: Dr. Markus Eich; yocto at yoctoproject.org
> Subject: RE: [yocto] How to select defconfig for kernel build with yocto/bitbake
>
> Ok. Can you try the following instead of the content I gave before
>
> KERNEL_DEFCONFIG = "odroidxu_ubuntu_defconfig"
>
> kernel_do_configure_append() {
> 	install -m 0644 ${S}/arch/${ARCH}/configs/${KERNEL_DEFCONFIG} ${WORKDIR}/defconfig
> 	install -m 0644 ${S}/arch/${ARCH}/configs/${KERNEL_DEFCONFIG} ${S}/.config
> }
>
>
> Regards,
> B.Sathish Kumar
>
> -----Original Message-----
> From: Dr. Markus Eich [mailto:markus.eich at dfki.de]
> Sent: Wednesday, July 09, 2014 5:39 PM
> To: Sathish Kumar Balasubramaniam -ERS, HCL Tech; yocto at yoctoproject.org
> Subject: Re: [yocto] How to select defconfig for kernel build with yocto/bitbake
>
> Thank you Sathish for the quick answer.
>
> The recipes now copies odroidxu_ubuntu_defconfig to defconfig in the
> workdir, but it still seems to be ignored.
> Maybe I am missing some includes to make the .config from defconfig?
>
> Using "make odroidxu_ubuntu_defconfig" using cross compiling (followed
> by "make zImage") works fine, while bitbake virtual/kernel produces some
> errors which are probably due to the wrong .config.
>
>
> Cheers,
>
> Markus
>
>
>
>
>
> On 09.07.2014 13:33, Sathish Kumar Balasubramaniam -ERS, HCL Tech wrote:
>> Hi Markus,
>>
>> Try adding the following to your recipe file
>>
>> KERNEL_DEFCONFIG = "odroidxu_ubuntu_defconfig"
>>
>> do_configure_prepend() {
>>           install -m 0644 ${S}/arch/${ARCH}/configs/${KERNEL_DEFCONFIG} ${WORKDIR}/defconfig || die "No default configuration for ${MACHINE} / ${KERNEL_DEFCONFIG} available."
>> }
>>
>>
>> Regards,
>> B.Sathish Kumar
>>
>> -----Original Message-----
>> From: yocto-bounces at yoctoproject.org [mailto:yocto-bounces at yoctoproject.org] On Behalf Of Dr. Markus Eich
>> Sent: Wednesday, July 09, 2014 3:09 PM
>> To: yocto at yoctoproject.org
>> Subject: [yocto] How to select defconfig for kernel build with yocto/bitbake
>>
>> Dear all,
>>
>> I work on the process to compile odroid xu kernel with yocto/bitbake
>>
>> In the kernel sources (from hardkernel) I have the corresponding
>> defconfig file, i.e. in the git folder
>> /arch/arm/configs/odroidxu_ubuntu_defconfig.
>>
>> How can I tell bitbake in my recipe to use "odroidxu_ubuntu_defconfig"?
>>
>> My recipe looks as follow:
>>
>> ===
>> require recipes-kernel/linux/linux-yocto.inc
>>
>> KERNEL_IMAGETYPE = "uImage"
>>
>> COMPATIBLE_MACHINE = "odroid-xu"
>>
>> LINUX_VERSION = "3.4.91"
>> LINUX_VERSION_EXTENSION = "-custom"
>>
>> FILESEXTRAPATHS_prepend := "${THISDIR}/linux-hardkernel-3.4:"
>>
>> S = "${WORKDIR}/git"
>>
>> # from where to fetch the kernel
>> KERNEL_REPO_OWNER ??= "hardkernel"
>> KERNEL_REPO_URI ??= "git://github.com/${KERNEL_REPO_OWNER}/linux.git"
>> KBRANCH = "odroidxu-3.4.y"
>>
>> SRCREV = "${AUTOREV}"
>>
>> KV = "3.4.91"
>> PV = "${KV}+gitr${SRCPV}"
>> LOCALVERSION ?= ""
>>
>>
>> SRC_URI = " \
>>      ${KERNEL_REPO_URI};nocheckout=1;branch=${KBRANCH} \
>> "
>>
>> PACKAGES =+ "kernel-headers"
>> FILES_kernel-headers = "${exec_prefix}/src/linux*"
>> ===
>>
>> Cheers,
>>
>> Markus
>>
>>
>>
>>

-- 
Dr.-Ing. Markus Eich

  Senior Researcher
  Marine Inspection Robotics
  Space Robotics
  
  Besuchsadresse der Nebengeschäftstelle:
  DFKI GmbH
  Robotics Innovation Center
  Robert-Hooke-Straße 5
  28359 Bremen, Germany
  
  Postadresse der Hauptgeschäftsstelle Standort Bremen:
  DFKI GmbH
  Robotics Innovation Center
  Robert-Hooke-Straße 1
  28359 Bremen, Germany

  Tel.:     +49 421 178 45-4105
  Zentrale: +49 421 178 45-0
  Fax:      +49 421 178 45-4150 (Faxe bitte namentlich kennzeichnen)
  E-Mail:   markus.eich at dfki.de

  Weitere Informationen: http://www.dfki.de/robotik
  -----------------------------------------------------------------------
  Deutsches Forschungszentrum fuer Kuenstliche Intelligenz GmbH
  Firmensitz: Trippstadter Straße 122, D-67663 Kaiserslautern
  Geschaeftsfuehrung: Prof. Dr. Dr. h.c. mult. Wolfgang Wahlster
  (Vorsitzender) Dr. Walter Olthoff
  Vorsitzender des Aufsichtsrats: Prof. Dr. h.c. Hans A. Aukes
  Amtsgericht Kaiserslautern, HRB 2313
  Sitz der Gesellschaft: Kaiserslautern (HRB 2313)
  USt-Id.Nr.:    DE 148646973
  Steuernummer:  19/673/0060/3
  -----------------------------------------------------------------------




More information about the yocto mailing list