From dbfa6f9563cb79a9c3db4a0f0c8c503fa3b3f29f Mon Sep 17 00:00:00 2001 From: Mark Asselstine Date: Thu, 31 Jan 2013 13:31:03 -0500 Subject: kernel: avoid copying unnecessary files during do_install kernel_do_install() populates $kerneldir with files needed to build external modules. To accomplish this there are several copy commands to get source from the kernel source tree and build trees after which a 'clean' is performed. Since we are copying from the build tree we get about 1G of .o and .cmd files copied over only to have them removed when we clean. This adds additional IO overhead as well as overhead caused by pseudo. By avoiding copying these files in the first place we get multiple gains: * avoid initial copy * avoid file deletes during clean * reduce pseudo overhead Additionally we are making use of cpio vs cp which tends to be significantly faster at performing copies. With these changes I observe a 15-30% decrease in the time to complete the do_install() operation on the kernel. [YOCTO #3517] (From OE-Core rev: c753f9d59f4d0a5af4ea5deb6e2b9609e05314e2) Signed-off-by: Mark Asselstine Signed-off-by: Bruce Ashfield Signed-off-by: Richard Purdie --- meta/classes/kernel.bbclass | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'meta/classes') diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass index e2a582b..cc61be6 100644 --- a/meta/classes/kernel.bbclass +++ b/meta/classes/kernel.bbclass @@ -143,10 +143,13 @@ kernel_do_install() { # work and sysroots can be on different partitions, so we can't rely on # hardlinking, unfortunately. # - cp -fR * $kerneldir + find . -depth -not -name "*.cmd" -not -name "*.o" -not -path "./.*" -print0 | cpio --null -pdu $kerneldir cp .config $kerneldir if [ "${S}" != "${B}" ]; then - cp -fR ${S}/* $kerneldir + pwd="$PWD" + cd "${S}" + find . -depth -not -path "./.*" -print0 | cpio --null -pdu $kerneldir + cd "$pwd" fi install -m 0644 ${KERNEL_OUTPUT} $kerneldir/${KERNEL_IMAGETYPE} install -m 0644 System.map $kerneldir/System.map-${KERNEL_VERSION} -- cgit v1.1