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

Darren Hart dvhart at linux.intel.com
Tue Mar 15 17:07:14 UTC 2011



On 03/15/2011 01:31 AM, Koen Kooi wrote:
>
> 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 :(

What are the ownership and perms on those?

I suppose we could avoid the .pc directory - but it's going to require 
something more than cp or some additional scripting. Something like 
tar's exclude functionality might be needed - but I hate to add the 
intermediate step as the kernel recipes are already so slow.

--
Darren

>
> 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
>>
>

-- 
Darren Hart
Intel Open Source Technology Center
Yocto Project - Linux Kernel




More information about the Openembedded-core mailing list