diff options
author | Andrew Wilcox <andy@protium.com> | 2006-12-07 19:13:24 +0000 |
---|---|---|
committer | Andrew Wilcox <andy@protium.com> | 2006-12-07 19:13:24 +0000 |
commit | 5aa4a59b009bfd254976fa020456a3339612a308 (patch) | |
tree | 3ef4b3a26c88b3612315a4085cdb409b23fd6290 | |
parent | 1d5f50bce888b5b4f20ff3bd14f6685f2c0355e7 (diff) |
openprotium: bitbake file for flash image construction
-rw-r--r-- | packages/images/openprotium-image.bb | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/packages/images/openprotium-image.bb b/packages/images/openprotium-image.bb new file mode 100644 index 0000000000..ba25af373a --- /dev/null +++ b/packages/images/openprotium-image.bb @@ -0,0 +1,135 @@ +DESCRIPTION = "OpenProtium image" +HOMEPAGE = "http://www.openprotium.com" +LICENSE = "MIT" +PR = "r0" + +DEPENDS = "${MACHINE_TASK_PROVIDER}" +# SLUGOS_IMAGENAME defines the name of the image to be build, if it +# is not set this package will be skipped! +EXTRA_IMAGECMD_jffs2 = "--pad --big-endian --eraseblock=0x10000 -D ${SLUGOS_DEVICE_TABLE}" +IMAGE_LINGUAS = "" + +# Setting USE_DEVFS prevents *any* entries being created initially +# in /dev +USE_DEVFS = "1" + +# This is passed to the image command to build the correct /dev +# directory (because only the image program can make actual +# dev entries!) +SLUGOS_DEVICE_TABLE = "${@bb.which(bb.data.getVar('BBPATH', d, 1), 'files/device_table-slugos.txt')}" + +# IMAGE_PREPROCESS_COMMAND is run before making the image. In SlugOS the +# kernel image is removed from the root file system to recover the space used - +# SlugOS is assumed to boot from a separate kernel image in flash (not in the +# root file system), if this is not the case the following must not be done! +IMAGE_PREPROCESS_COMMAND += "rm ${IMAGE_ROOTFS}/boot/uImage*;" + +# Always just make a new flash image. +PACK_IMAGE = 'storcenter_pack_image;' +IMAGE_POSTPROCESS_COMMAND += "${PACK_IMAGE}" +PACK_IMAGE_DEPENDS = "" +#EXTRA_IMAGEDEPENDS += "${PACK_IMAGE_DEPENDS}" + +# This hack removes '${MACHINE}' from the end of the arch.conf for ipk, +# preventing _mach.ipk (with no byte sex) taking precedence over everything +# else. +# but we want 'storcenter' in there so kernel modules work correctly. +# +#ROOTFS_POSTPROCESS_COMMAND += "sed -i '$d' '${IMAGE_ROOTFS}/etc/ipkg/arch.conf';" + +# These depends define native utilities - they do not get put in the flash and +# are not required to build the image. +IMAGE_TOOLS = "" +#EXTRA_IMAGEDEPENDS += "${IMAGE_TOOLS}" + +# CONFIG: +# SLUGOS_EXTRA_RDEPENDS: set in conf, things to add to the image +# SLUGOS_SUPPORT: set to here, see below, added to the image. +# SLUGOS_KERNEL: set here, kernel modules added to the image +# +# Do not override the last two unless you really know what you +# are doing - there is more information below. + +# diff, cpio and find are required for reflash and turnup ram. +# Removing these probably leaves the system bootable, but standard +# openslug and ucslugc stuff won't work, so only take these out in +# very non-standard turnkey slugos builds. +# +# udev is the default way of handling devices, there is no guarantee +# that the static device table is completely correct (it is just +# known to be sufficient for boot.) +# we'ere still on 2.6.12 devfs.... +#OPENPROTIUM_SUPPORT ?= "diffutils cpio findutils udev" +# +OPENPROTIUM_SUPPORT ?= "diffutils cpio findutils uboot-utils" + +# kernel-module-af-packet must be in the image for DHCP to work +# kernel-module-netconsole is here because it is small and is +# highly useful on minimal systems (which really don't have anywhere +# other than the network to output error messages!) +SLUGOS_KERNEL ?= "kernel-module-af-packet kernel-module-netconsole \ + kernel-module-mii " + +# this gets /lib/modules made.... +OPENPROTIUM_KERNEL = "kernel-module-dummy \ + kernel-module-af-packet " + +RDEPENDS = " \ + kernel base-files base-passwd netbase \ + busybox initscripts-openprotium slugos-init \ + update-modules sysvinit tinylogin \ + module-init-tools modutils-initscripts \ + ipkg-collateral ipkg ipkg-link \ + libgcc1 \ + portmap \ + dropbear \ + e2fsprogs-blkid \ + mdadm \ + hdparm \ + mtd-utils \ + sccd \ + util-linux-mount \ + util-linux-umount \ + util-linux-swaponoff \ + util-linux-losetup \ + ${OPENPROTIUM_SUPPORT} \ + ${OPENPROTIUM_KERNEL} " +# ${SLUGOS_EXTRA_RDEPENDS}" + +IPKG_INSTALL = "${RDEPENDS}" + +inherit image_ipk + +storcenter_pack_image() { + ls -ltr ${DEPLOY_DIR_IMAGE}/uImage* + pwd + echo ${IMAGE_NAME} + # find latest kernel + KERNEL=`ls -ltr ${DEPLOY_DIR_IMAGE}/uImage* | tail -1 | awk '{print $9}'` + 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 +} |