storcenter: Add storcenter-image.bbclass
authorOyvind Repvik <nail@nslu2-linux.org>
Wed, 21 Mar 2007 10:36:45 +0000 (10:36 +0000)
committerOyvind Repvik <nail@nslu2-linux.org>
Wed, 21 Mar 2007 10:36:45 +0000 (10:36 +0000)
classes/storcenter-image.bbclass [new file with mode: 0644]

diff --git a/classes/storcenter-image.bbclass b/classes/storcenter-image.bbclass
new file mode 100644 (file)
index 0000000..de77f1b
--- /dev/null
@@ -0,0 +1,30 @@
+storcenter_pack_image() {
+        # find latest kernel
+        KERNEL=`ls -tr ${DEPLOY_DIR_IMAGE}/uImage* | tail -1`
+        if [ -z "$KERNEL" ]; then
+                oefatal "No kernel found in ${DEPLOY_DIR_IMAGE}. Bitbake linux-storcenter to create one."
+                exit 1
+        fi
+        ROOTFS=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2
+        OUTPUT=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.flash.img
+        PADFILE=${DEPLOY_DIR_IMAGE}/padfile.zzz
+        HEX_MAX_KERN_SIZE=170000
+        DEC_MAX_KERN_SIZE=`echo "ibase=16; $HEX_MAX_KERN_SIZE" | bc `
+        HEX_MAX_ROOT_SIZE=590000
+        DEC_MAX_ROOT_SIZE=`echo "ibase=16; $HEX_MAX_ROOT_SIZE" | bc `
+        KERNEL_SIZE=`ls -l $KERNEL | awk '{print $5}'`
+        if [ $KERNEL_SIZE -gt $DEC_MAX_KERN_SIZE ]; then
+                oefatal "Kernel too large at $KERNEL_SIZE bytes.  Max is $DEC_MAX_KERN_SIZE."
+                exit 1
+        fi
+        ROOT_SIZE=`ls -l $ROOTFS | awk '{print $5}'`
+        if [ $ROOT_SIZE -gt $DEC_MAX_ROOT_SIZE ]; then
+                oefatal "Rootfs is too large at $ROOT_SIZE bytes.  Max is $DEC_MAX_ROOT_SIZE."
+                exit 1
+        fi
+        PAD_SIZE=`echo "$DEC_MAX_KERN_SIZE - $KERNEL_SIZE" | bc `
+        dd if=/dev/zero of=$PADFILE bs=$PAD_SIZE count=1 2>>/dev/null
+        cat $KERNEL $PADFILE $ROOTFS > $OUTPUT
+        rm -f $PADFILE
+        ls -l $OUTPUT
+}