diff options
Diffstat (limited to 'meta/classes')
| -rw-r--r-- | meta/classes/bootimg.bbclass | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/meta/classes/bootimg.bbclass b/meta/classes/bootimg.bbclass new file mode 100644 index 0000000000..24e2d296ad --- /dev/null +++ b/meta/classes/bootimg.bbclass | |||
| @@ -0,0 +1,90 @@ | |||
| 1 | # bootimg.oeclass | ||
| 2 | # Copyright (C) 2004, Advanced Micro Devices, Inc. All Rights Reserved | ||
| 3 | # Released under the MIT license (see packages/COPYING) | ||
| 4 | |||
| 5 | # This creates a bootable image using syslinux, your kernel and an optional | ||
| 6 | # initrd | ||
| 7 | |||
| 8 | # External variables needed | ||
| 9 | # ${INITRD} - indicates a filesystem image to use as an initrd (optional) | ||
| 10 | # ${AUTO_SYSLINUXCFG} - set this to 1 to enable creating an automatic config | ||
| 11 | # ${LABELS} - a list of targets for the automatic config | ||
| 12 | # ${APPEND} - an override list of append strings for each label | ||
| 13 | # ${SYSLINUX_OPTS} - additional options to add to the syslinux file ';' delimited | ||
| 14 | |||
| 15 | do_rootfs[depends] +="dosfstools-native:do_populate_staging syslinux-native:do_populate_staging mtools-native:do_populate_staging cdrtools-native:do_populate_staging" | ||
| 16 | |||
| 17 | BDIR="${WORKDIR}/boot" | ||
| 18 | ISODIR="${IMAGE_ROOTFS}/isolinux/" | ||
| 19 | |||
| 20 | BOOTIMG_VOLUME_ID ?= "oe" | ||
| 21 | BOOTIMG_EXTRA_SPACE ?= "64" | ||
| 22 | |||
| 23 | # Get the build_syslinux_cfg() function from the syslinux class | ||
| 24 | |||
| 25 | SYSLINUXCFG="${BDIR}/syslinux.cfg" | ||
| 26 | SYSLINUXMENU="${BDIR}/menu" | ||
| 27 | inherit syslinux | ||
| 28 | |||
| 29 | build_boot_bin() { | ||
| 30 | install -d ${BDIR} | ||
| 31 | install -m 0644 ${STAGING_KERNEL_DIR}/bzImage \ | ||
| 32 | ${BDIR}/vmlinuz | ||
| 33 | |||
| 34 | if [ -n "${INITRD}" ] && [ -s "${INITRD}" ]; then | ||
| 35 | install -m 0644 ${INITRD} ${BDIR}/initrd | ||
| 36 | fi | ||
| 37 | |||
| 38 | install -m 444 ${STAGING_DIR}/${BUILD_SYS}/share/syslinux/ldlinux.sys \ | ||
| 39 | ${BDIR}/ldlinux.sys | ||
| 40 | |||
| 41 | # Do a little math, bash style | ||
| 42 | #BLOCKS=`du -s ${BDIR} | cut -f 1` | ||
| 43 | BLOCKS=`du -bks ${BDIR} | cut -f 1` | ||
| 44 | SIZE=`expr $BLOCKS + ${BOOTIMG_EXTRA_SPACE}` | ||
| 45 | |||
| 46 | mkdosfs -F 12 -n ${BOOTIMG_VOLUME_ID} -d ${BDIR} \ | ||
| 47 | -C ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-boot.bin $SIZE | ||
| 48 | |||
| 49 | syslinux ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-boot.bin | ||
| 50 | |||
| 51 | #Create an ISO if we have an INITRD | ||
| 52 | if [ -n "${INITRD}" ] && [ -s "${INITRD}" ] && [ "${NOISO}" != "1" ] ; then | ||
| 53 | install -d ${ISODIR} | ||
| 54 | |||
| 55 | # Install the kernel | ||
| 56 | |||
| 57 | install -m 0644 ${STAGING_KERNEL_DIR}/bzImage \ | ||
| 58 | ${ISODIR}/vmlinuz | ||
| 59 | |||
| 60 | # Install the configuration files | ||
| 61 | |||
| 62 | cp ${BDIR}/syslinux.cfg ${ISODIR}/isolinux.cfg | ||
| 63 | |||
| 64 | if [ -f ${SYSLINUXMENU} ]; then | ||
| 65 | cp ${SYSLINUXMENU} ${ISODIR} | ||
| 66 | fi | ||
| 67 | |||
| 68 | install -m 0644 ${INITRD} ${ISODIR}/initrd | ||
| 69 | |||
| 70 | # And install the syslinux stuff | ||
| 71 | cp ${STAGING_DIR}/${BUILD_SYS}/share/syslinux/isolinux.bin \ | ||
| 72 | ${ISODIR} | ||
| 73 | |||
| 74 | mkisofs -V ${BOOTIMG_VOLUME_ID} \ | ||
| 75 | -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.iso \ | ||
| 76 | -b isolinux/isolinux.bin -c isolinux/boot.cat -r \ | ||
| 77 | -no-emul-boot -boot-load-size 4 -boot-info-table \ | ||
| 78 | ${IMAGE_ROOTFS} | ||
| 79 | fi | ||
| 80 | } | ||
| 81 | |||
| 82 | python do_bootimg() { | ||
| 83 | bb.build.exec_func('build_syslinux_cfg', d) | ||
| 84 | bb.build.exec_func('build_boot_bin', d) | ||
| 85 | } | ||
| 86 | |||
| 87 | # We need to run after bootsplash if it exists, so thats why this line | ||
| 88 | # is such. Don't worry, if you don't do bootsplash, nobody will notice | ||
| 89 | |||
| 90 | addtask bootimg before do_build after do_bootsplash | ||
