From patchwork Thu Nov 24 08:05:10 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [RFC,5/5] bootimg: Allow for EFI-only boot images Date: Thu, 24 Nov 2011 08:05:10 -0000 From: Darren Hart X-Patchwork-Id: 15371 Message-Id: <705ac370731c81be23968e718838ad6a743e5828.1322120651.git.dvhart@linux.intel.com> To: Richard Purdie , Koen Kooi , Chris Larson , Josef Ahmad , openembedded-core@lists.openembedded.org Cc: Darren Hart Condition building PCBIOS legacy images on MACHINE_FEATURES containing "pcbios" or not containing "efi". This ensures existing BSPs will continue to get the old PCBIOS legacy-only images. New BSPs can add "efi", "pcbios", or both. The images created likewise support one or the other or both. EFI-only ISO images are untested. Signed-off-by: Darren Hart --- meta/classes/bootimg.bbclass | 49 ++++++++++++++++++++++++++++++++++------- 1 files changed, 40 insertions(+), 9 deletions(-) diff --git a/meta/classes/bootimg.bbclass b/meta/classes/bootimg.bbclass index 44bb61e..d2088fe 100644 --- a/meta/classes/bootimg.bbclass +++ b/meta/classes/bootimg.bbclass @@ -38,7 +38,24 @@ BOOTIMG_EXTRA_SPACE ?= "512" EFI = ${@base_contains("MACHINE_FEATURES", "efi", "1", "0", d)} EFI_CLASS = ${@base_contains("MACHINE_FEATURES", "efi", "grub-efi", "dummy", d)} -inherit syslinux +# Include legacy boot if MACHINE_FEATURES includes "pcbios" or if it does not +# contain "efi". This way legacy is supported by default if neither is +# specified, maintaining the original behavior. +def pcbios(d): + pcbios = base_contains("MACHINE_FEATURES", "pcbios", "1", "0", d) + if pcbios == "0": + pcbios = base_contains("MACHINE_FEATURES", "efi", "0", "1", d) + return pcbios + +def pcbios_class(d): + if d.getVar("PCBIOS", True) == "1": + return "syslinux" + return "dummy" + +PCBIOS = ${@pcbios(d)} +PCBIOS_CLASS = ${@pcbios_class(d)} + +inherit ${PCBIOS_CLASS} inherit ${EFI_CLASS} @@ -51,15 +68,24 @@ build_iso() { install -d ${ISODIR} - syslinux_iso_populate + if [ "${PCBIOS}" = "1" ]; then + syslinux_iso_populate + fi if [ "${EFI}" = "1" ]; then grubefi_iso_populate fi - mkisofs -V ${BOOTIMG_VOLUME_ID} \ - -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.iso \ - -b ${ISO_BOOTIMG} -c ${ISO_BOOTCAT} -r \ - ${MKISOFS_OPTIONS} ${ISODIR} + if [ "${PCBIOS}" = "1" ]; then + mkisofs -V ${BOOTIMG_VOLUME_ID} \ + -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.iso \ + -b ${ISO_BOOTIMG} -c ${ISO_BOOTCAT} -r \ + ${MKISOFS_OPTIONS} ${ISODIR} + else + bbnote "EFI-only ISO images are untested, please provide feedback." + mkisofs -V ${BOOTIMG_VOLUME_ID} \ + -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.iso \ + -r ${ISODIR} + fi cd ${DEPLOY_DIR_IMAGE} rm -f ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.iso @@ -69,7 +95,9 @@ build_iso() { build_hddimg() { install -d ${HDDDIR} - syslinux_hddimg_populate + if [ "${PCBIOS}" = "1" ]; then + syslinux_hddimg_populate + fi if [ "${EFI}" = "1" ]; then grubefi_hddimg_populate fi @@ -81,7 +109,9 @@ build_hddimg() { mkdosfs -n ${BOOTIMG_VOLUME_ID} -d ${HDDDIR} \ -C ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.hddimg $SIZE - syslinux_hddimg_install + if [ "${PCBIOS}" = "1" ]; then + syslinux_hddimg_install + fi chmod 644 ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.hddimg @@ -91,7 +121,8 @@ build_hddimg() { } python do_bootimg() { - bb.build.exec_func('build_syslinux_cfg', d) + if d.getVar("PCBIOS", True) == "1": + bb.build.exec_func('build_syslinux_cfg', d) if d.getVar("EFI", True) == "1": bb.build.exec_func('build_grub_cfg', d) bb.build.exec_func('build_hddimg', d)