[poky] [OE-core] [PATCH 2/2] kernel.bbclass: do_sizecheck: update path to build image and do not delete

michel.thebeau at windriver.com michel.thebeau at windriver.com
Thu Mar 28 12:32:52 PDT 2013


From: Michel Thebeau <michel.thebeau at windriver.com>

do_sizecheck has been around for a while but looks to have been unused.
There are a few issues.

It breaks because KERNEL_OUTPUT is a path relative to ${B}, and
resolves to a soft link to ${B}/${KERNEL_IMAGETYPE}.  When
do_sizecheck runs it does not find the file (because the working
directory is elsewhere) and does not fail.

Also, when do_sizecheck deletes the oversized kernel image it leaves
the previously run do_compile task with inaccurate status.

So, do the following:
 - keep the oversized image file so the status of do_compile is valid
 - specify the full path with ${B} to break the dependency on working
   directory
 - test for the image file in two typical locations and print a
   "not supported" warning when it is not found
 - finally, print a note that the size check was run successfully

[YOCTO #3514]

Signed-off-by: Bruce Ashfield <bruce.ashfield at windriver.com>
Signed-off-by: Michel Thebeau <michel.thebeau at windriver.com>
---
 meta/classes/kernel.bbclass |   25 +++++++++++++++++++++----
 1 file changed, 21 insertions(+), 4 deletions(-)

diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
index 6f988e7..d25d98a 100644
--- a/meta/classes/kernel.bbclass
+++ b/meta/classes/kernel.bbclass
@@ -300,10 +300,27 @@ python split_kernel_packages () {
 # with a fixed length or there is a limit in transferring the kernel to memory
 do_sizecheck() {
 	if [ ! -z "${KERNEL_IMAGE_MAXSIZE}" ]; then
-		size=`ls -l ${KERNEL_OUTPUT} | awk '{ print $5}'`
-		if [ $size -ge ${KERNEL_IMAGE_MAXSIZE} ]; then
-			rm ${KERNEL_OUTPUT}
-			die "This kernel (size=$size > ${KERNEL_IMAGE_MAXSIZE}) is too big for your device. Please reduce the size of the kernel by making more of it modular."
+		if [ -f ${B}/${KERNEL_OUTPUT} ]; then
+			# vmlinux.bin is usually found here
+			koutf="${B}/${KERNEL_OUTPUT}"
+		elif [ -f ${B}/${KERNEL_IMAGETYPE} ]; then
+			# vmlinux is usually found here
+			koutf="${B}/${KERNEL_IMAGETYPE}"
+		else
+			# if we're lucky we'll catch some other image
+			# types in the previous conditions; otherwise:
+			koutf=""
+		fi
+
+		if [ -z "$koutf" ]; then
+			bbwarn "KERNEL_IMAGE_MAXSIZE enabled but" \
+			       "${KERNEL_IMAGETYPE} not supported (or not found)"
+		else
+			size=`ls -l $koutf | awk '{ print $5}'`
+			if [ $size -ge ${KERNEL_IMAGE_MAXSIZE} ]; then
+				die "This kernel (size=$size > ${KERNEL_IMAGE_MAXSIZE}) is too big for your device. Please reduce the size of the kernel by making more of it modular."
+			fi
+			bbnote "kernel image size check... done"
 		fi
 	fi
 }
-- 
1.7.9.7




More information about the poky mailing list