diff options
-rw-r--r-- | meta/classes/bootimg.bbclass | 35 | ||||
-rw-r--r-- | meta/classes/grub-efi.bbclass | 8 |
2 files changed, 31 insertions, 12 deletions
diff --git a/meta/classes/bootimg.bbclass b/meta/classes/bootimg.bbclass index bd211fbdc3..fdd4ea9561 100644 --- a/meta/classes/bootimg.bbclass +++ b/meta/classes/bootimg.bbclass | |||
@@ -32,6 +32,7 @@ EXCLUDE_FROM_WORLD = "1" | |||
32 | 32 | ||
33 | HDDDIR = "${S}/hddimg" | 33 | HDDDIR = "${S}/hddimg" |
34 | ISODIR = "${S}/iso" | 34 | ISODIR = "${S}/iso" |
35 | EFIIMGDIR = "${S}/efi_img" | ||
35 | 36 | ||
36 | BOOTIMG_VOLUME_ID ?= "boot" | 37 | BOOTIMG_VOLUME_ID ?= "boot" |
37 | BOOTIMG_EXTRA_SPACE ?= "512" | 38 | BOOTIMG_EXTRA_SPACE ?= "512" |
@@ -48,15 +49,10 @@ def pcbios(d): | |||
48 | pcbios = base_contains("MACHINE_FEATURES", "efi", "0", "1", d) | 49 | pcbios = base_contains("MACHINE_FEATURES", "efi", "0", "1", d) |
49 | return pcbios | 50 | return pcbios |
50 | 51 | ||
51 | def pcbios_class(d): | ||
52 | if d.getVar("PCBIOS", True) == "1": | ||
53 | return "syslinux" | ||
54 | return "" | ||
55 | |||
56 | PCBIOS = "${@pcbios(d)}" | 52 | PCBIOS = "${@pcbios(d)}" |
57 | PCBIOS_CLASS = "${@pcbios_class(d)}" | ||
58 | 53 | ||
59 | inherit ${PCBIOS_CLASS} | 54 | # The syslinux is required for the isohybrid command and boot catalog |
55 | inherit syslinux | ||
60 | inherit ${EFI_CLASS} | 56 | inherit ${EFI_CLASS} |
61 | 57 | ||
62 | populate() { | 58 | populate() { |
@@ -90,21 +86,36 @@ build_iso() { | |||
90 | fi | 86 | fi |
91 | if [ "${EFI}" = "1" ]; then | 87 | if [ "${EFI}" = "1" ]; then |
92 | grubefi_iso_populate | 88 | grubefi_iso_populate |
89 | build_fat_img ${EFIIMGDIR} ${ISODIR}/efi.img | ||
93 | fi | 90 | fi |
94 | 91 | ||
95 | if [ "${PCBIOS}" = "1" ]; then | 92 | # EFI only |
93 | if [ "${PCBIOS}" != "1" ] && [ "${EFI}" = "1" ] ; then | ||
94 | # Work around bug in isohybrid where it requires isolinux.bin | ||
95 | # In the boot catalog, even though it is not used | ||
96 | mkdir -p ${ISODIR}/${ISOLINUXDIR} | ||
97 | install -m 0644 ${STAGING_DATADIR}/syslinux/isolinux.bin ${ISODIR}${ISOLINUXDIR} | ||
98 | fi | ||
99 | |||
100 | if [ "${PCBIOS}" = "1" ] && [ "${EFI}" != "1" ] ; then | ||
101 | # PCBIOS only media | ||
96 | mkisofs -V ${BOOTIMG_VOLUME_ID} \ | 102 | mkisofs -V ${BOOTIMG_VOLUME_ID} \ |
97 | -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.iso \ | 103 | -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.iso \ |
98 | -b ${ISO_BOOTIMG} -c ${ISO_BOOTCAT} -r \ | 104 | -b ${ISO_BOOTIMG} -c ${ISO_BOOTCAT} -r \ |
99 | ${MKISOFS_OPTIONS} ${ISODIR} | 105 | ${MKISOFS_OPTIONS} ${ISODIR} |
100 | else | 106 | else |
101 | bbnote "EFI-only ISO images are untested, please provide feedback." | 107 | # EFI only OR EFI+PCBIOS |
102 | mkisofs -V ${BOOTIMG_VOLUME_ID} \ | 108 | mkisofs -A ${BOOTIMG_VOLUME_ID} -V ${BOOTIMG_VOLUME_ID} \ |
103 | -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.iso \ | 109 | -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.iso \ |
104 | -r ${ISODIR} | 110 | -b ${ISO_BOOTIMG} -c ${ISO_BOOTCAT} \ |
111 | -r ${MKISOFS_OPTIONS} \ | ||
112 | -eltorito-alt-boot -eltorito-platform efi \ | ||
113 | -b efi.img -no-emul-boot \ | ||
114 | ${ISODIR} | ||
115 | isohybrid_args="-u" | ||
105 | fi | 116 | fi |
106 | 117 | ||
107 | isohybrid ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.iso | 118 | isohybrid $isohybrid_args ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.iso |
108 | 119 | ||
109 | cd ${DEPLOY_DIR_IMAGE} | 120 | cd ${DEPLOY_DIR_IMAGE} |
110 | rm -f ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.iso | 121 | rm -f ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.iso |
diff --git a/meta/classes/grub-efi.bbclass b/meta/classes/grub-efi.bbclass index c6f5d4e246..c21babb293 100644 --- a/meta/classes/grub-efi.bbclass +++ b/meta/classes/grub-efi.bbclass | |||
@@ -41,6 +41,14 @@ grubefi_populate() { | |||
41 | 41 | ||
42 | grubefi_iso_populate() { | 42 | grubefi_iso_populate() { |
43 | grubefi_populate ${ISODIR} | 43 | grubefi_populate ${ISODIR} |
44 | # Build a EFI directory to create efi.img | ||
45 | mkdir -p ${EFIIMGDIR}/${EFIDIR} | ||
46 | cp ${ISODIR}/${EFIDIR}/* ${EFIIMGDIR}${EFIDIR} | ||
47 | cp ${ISODIR}/vmlinuz ${EFIIMGDIR} | ||
48 | echo "EFI\\BOOT\\${GRUB_IMAGE}" > ${EFIIMGDIR}/startup.nsh | ||
49 | if [ -f "${ISODIR}/initrd" ] ; then | ||
50 | cp ${ISODIR}/initrd ${EFIIMGDIR} | ||
51 | fi | ||
44 | } | 52 | } |
45 | 53 | ||
46 | grubefi_hddimg_populate() { | 54 | grubefi_hddimg_populate() { |