[OE-core] [PATCH] [RFC] kernel: rework kernel and module classes to allow for building out-of-tree modules

Koen Kooi koen at beagleboard.org
Tue Mar 15 08:31:05 UTC 2011


Op 15 mrt 2011, om 08:25 heeft Darren Hart het volgende geschreven:

> NOT FOR INCLUSION
> 
> Before we include something like this, it needs review from folks like Koen and
> Gary to confirm it works in their environment as well.
> 
> The existing infrastructure uses an external build tree which references the
> kernel source in the work dir. If run with rm work, building external modules
> will fail.
> 
> This patch places a configured source tree in sysroots. Striking a balance
> between minimal size and minimal maintenance is difficult. This version leans
> on the side of caution and removes only the obviously unecessary parts of the
> source tree to conserve space.
> 
> Care is also taken to clean the hostprogs in scripts, and the modules are
> responsible for building them as needed.

I get this:

| cp: cannot open `./.pc/0001-PSP-3.0.1.6-kernel-source-patched-with-OCF-Linux.patch/crypto/ocf/ixp4xx/ixp4xx.c' for reading: Permission denied

After adding 'do_make_scripts' in my module do_compile and applying your patch. So it seems to be tripping on the quilt directory :(

regards,

Koen


> 
> Signed-off-by: Darren Hart <dvhart at linux.intel.com>
> CC: Koen Kooi <koen at beagleboard.org>
> CC: Gary Thomas <gary at mlbassoc.com>
> ---
> meta/classes/kernel.bbclass               |   96 ++++++++++------------------
> meta/classes/module.bbclass               |    9 ++-
> meta/recipes-kernel/linux/linux-yocto.inc |    4 +
> 3 files changed, 45 insertions(+), 64 deletions(-)
> 
> diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
> index 90a7d64..c714931 100644
> --- a/meta/classes/kernel.bbclass
> +++ b/meta/classes/kernel.bbclass
> @@ -110,78 +110,50 @@ 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
> +	if [ ! "${S}" == "${B}" ]; then
> +		cp -fR ${S}/* $kerneldir
> 	fi
> 
> -	# 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 _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 bbceaf7..572df0d 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 0812144..582e386 100644
> --- a/meta/recipes-kernel/linux/linux-yocto.inc
> +++ b/meta/recipes-kernel/linux/linux-yocto.inc
> @@ -21,3 +21,7 @@ inherit kernel-yocto
> require linux-dtb.inc
> 
> B = "${WORKDIR}/linux-${MACHINE}-${LINUX_KERNEL_TYPE}-build"
> +
> +do_install_append(){
> +	rm -rf ${STAGING_KERNEL_DIR}/$KMETA
> +}
> -- 
> 1.7.1
> 





More information about the Openembedded-core mailing list