diff options
-rw-r--r-- | meta/classes/kernel.bbclass | 97 | ||||
-rw-r--r-- | meta/classes/module.bbclass | 9 | ||||
-rw-r--r-- | meta/recipes-kernel/linux/linux-yocto.inc | 6 |
3 files changed, 48 insertions, 64 deletions
diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass index a9a8f4fe9b..3eb6659a75 100644 --- a/meta/classes/kernel.bbclass +++ b/meta/classes/kernel.bbclass @@ -115,78 +115,51 @@ kernel_do_install() { install -d ${D}/etc/modprobe.d fi - + # + # Support for external module building - create a minimal copy of the + # kernel source tree. + # + kerneldir=${STAGING_KERNEL_DIR} + install -d $kerneldir # - # Support for external module building - create a minimal copy of the kernel source tree + # 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. # - kerneldir=${D}/kernel/ - - # Take care of arch specific headers - # Kernel 2.6.27 moved headers from includes/asm-${ARCH} to arch/${ARCH}/include/asm - if [ -e arch/${ARCH}/include/asm/ ] ; then - install -d $kerneldir/arch/${ARCH}/ - cp -fR arch/${ARCH}/* $kerneldir/arch/${ARCH}/ - - # Check for arch/x86 on i386 - elif [ -d arch/x86/include/asm/ ]; then - if [ -e include/asm ] ; then - install -d $kerneldir/include/asm/ - cp -fR arch/x86/include/asm/* $kerneldir/include/asm/ - fi - install -d $kerneldir/arch/x86/include - cp -fR arch/x86/* $kerneldir/arch/x86/ + # work and sysroots can be on different partitions, so we can't rely on + # hardlinking, unfortunately. + # + cp -fR * $kerneldir + cp .config $kerneldir + if [ ! "${S}" == "${B}" ]; then + cp -fR ${S}/* $kerneldir fi + echo "LINUX BUILD TREE COPIED TO SYSROOTS" + du -hs $kerneldir - # Take care of the rest of the main directories we need - for entry in drivers/crypto drivers/media include scripts; do - if [ -d $entry ]; then - mkdir -p $kerneldir/$entry - cp -fR $entry/* $kerneldir/$entry/ - fi - done - - install -m 0644 .config $kerneldir/config-${KERNEL_VERSION} - ln -sf config-${KERNEL_VERSION} $kerneldir/.config - ln -sf config-${KERNEL_VERSION} $kerneldir/kernel-config - echo "${KERNEL_VERSION}" >$kerneldir/kernel-abiversion - echo "${S}" >$kerneldir/kernel-source - echo "${KERNEL_CCSUFFIX}" >$kerneldir/kernel-ccsuffix - echo "${KERNEL_LDSUFFIX}" >$kerneldir/kernel-ldsuffix - [ -e vmlinux ] && install -m 0644 vmlinux $kerneldir/ - install -m 0644 ${KERNEL_OUTPUT} $kerneldir/${KERNEL_IMAGETYPE} - install -m 0644 System.map $kerneldir/System.map-${KERNEL_VERSION} - [ -e Module.symvers ] && install -m 0644 Module.symvers $kerneldir/ - - # Copy over the main Makefiles - [ -e Rules.make ] && install -m 0644 Rules.make $kerneldir/ - [ -e Makefile ] && install -m 0644 Makefile $kerneldir/ - # Check if arch/${ARCH}/Makefile exists and install it - if [ -e arch/${ARCH}/Makefile ]; then - install -d $kerneldir/arch/${ARCH} - install -m 0644 arch/${ARCH}/Makefile* $kerneldir/arch/${ARCH} - # Otherwise check arch/x86/Makefile for i386 and x86_64 on kernels >= 2.6.24 - elif [ -e arch/x86/Makefile ]; then - install -d $kerneldir/arch/x86 - install -m 0644 arch/x86/Makefile* $kerneldir/arch/x86 - fi + # + # 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="${KERNEL_CC}" LD="${KERNEL_LD}" clean + make -C $kerneldir _mrproper_scripts + find $kerneldir -path $kerneldir/scripts -prune -o -name "*.[csS]" -exec rm '{}' \; + find $kerneldir/Documentation -name "*.txt" -exec rm '{}' \; # Remove the following binaries which cause strip errors # during do_package for cross-compiled platforms bin_files="arch/powerpc/boot/addnote arch/powerpc/boot/hack-coff \ - arch/powerpc/boot/mktree scripts/bin2c scripts/conmakehash \ - scripts/ihex2fw scripts/kallsyms scripts/pnmtologo scripts/basic/docproc \ - scripts/basic/fixdep scripts/basic/hash scripts/dtc/dtc \ - scripts/genksyms/genksyms scripts/kconfig/conf scripts/mod/mk_elfconfig \ - scripts/mod/modpost scripts/recordmcount" - rm -rf $kerneldir/scripts/*.o - rm -rf $kerneldir/scripts/basic/*.o - rm -rf $kerneldir/scripts/kconfig/*.o - rm -rf $kerneldir/scripts/mod/*.o - rm -rf $kerneldir/scripts/dtc/*.o + arch/powerpc/boot/mktree" for entry in $bin_files; do - rm -f $kerneldir/$entry - done + rm -f $kerneldir/$entry + done } sysroot_stage_all_append() { diff --git a/meta/classes/module.bbclass b/meta/classes/module.bbclass index bbceaf7219..572df0d295 100644 --- a/meta/classes/module.bbclass +++ b/meta/classes/module.bbclass @@ -3,14 +3,19 @@ DEPENDS += "virtual/kernel" inherit module-base -# Ensure the hostprogs are available for module compilation -module_do_compile_prepend() { +# +# Ensure the hostprogs are available for module compilation. Modules that +# inherit this recipe and override do_compile() should be sure to call +# do_make_scripts() or ensure the scripts are built independently. +# +do_make_scripts() { unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS oe_runmake CC="${KERNEL_CC}" LD="${KERNEL_LD}" AR="${KERNEL_AR}" \ -C ${STAGING_KERNEL_DIR} scripts } module_do_compile() { + do_make_scripts unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS oe_runmake KERNEL_PATH=${STAGING_KERNEL_DIR} \ KERNEL_SRC=${STAGING_KERNEL_DIR} \ diff --git a/meta/recipes-kernel/linux/linux-yocto.inc b/meta/recipes-kernel/linux/linux-yocto.inc index 0812144d46..c304d009eb 100644 --- a/meta/recipes-kernel/linux/linux-yocto.inc +++ b/meta/recipes-kernel/linux/linux-yocto.inc @@ -21,3 +21,9 @@ inherit kernel-yocto require linux-dtb.inc B = "${WORKDIR}/linux-${MACHINE}-${LINUX_KERNEL_TYPE}-build" + +do_install_append(){ + if [ -n "${KMETA}" ]; then + rm -rf ${STAGING_KERNEL_DIR}/${KMETA} + fi +} |