summaryrefslogtreecommitdiffstats
path: root/meta/classes/grub-efi.bbclass
diff options
context:
space:
mode:
authorDarren Hart <dvhart@linux.intel.com>2012-02-01 16:15:04 -0800
committerRichard Purdie <richard.purdie@linuxfoundation.org>2012-02-08 00:50:22 +0000
commit67cfa7474449987f1f0c5232e19783ee79e3883d (patch)
treecaa97626a856ea434a469c37e340d2ddc4b7499d /meta/classes/grub-efi.bbclass
parent50a097be169f4eb0bfbef181c11bd4afe8ad127b (diff)
downloadpoky-67cfa7474449987f1f0c5232e19783ee79e3883d.tar.gz
bootimg: Use the same OS files for each boot method
Fixes [YOCTO #1951] The do_bootimg code can generate hybrid efi+pcbios images (syslinux and grub-efi) to boot on platforms with both EFI and legacy BIOS options. The current implementation copies the kernel, initrd, and rootfs twice, unnecessarily bloating the image size. This is an especially egregious bug on -sato images. Update the classes to use a common install of the kernel, initrd, and rootfs to the root of the boot media. Grub-efi, syslinux, and isolinux can all reference this location explicitly with a leading slash. Tested with an EFI+PCBIOS image in both EFI and PCBIOS boot modes on two platforms. No ISO image testing was performed. (From OE-Core rev: 5209016cf4c4c8f649e37dc8857b3fbcfe8dd8c8) Signed-off-by: Darren Hart <dvhart@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes/grub-efi.bbclass')
-rw-r--r--meta/classes/grub-efi.bbclass28
1 files changed, 9 insertions, 19 deletions
diff --git a/meta/classes/grub-efi.bbclass b/meta/classes/grub-efi.bbclass
index 762322b28e..1efb43b805 100644
--- a/meta/classes/grub-efi.bbclass
+++ b/meta/classes/grub-efi.bbclass
@@ -22,39 +22,29 @@ GRUB_TIMEOUT ?= "10"
22GRUB_OPTS ?= "serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1" 22GRUB_OPTS ?= "serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1"
23 23
24EFIDIR = "/EFI/BOOT" 24EFIDIR = "/EFI/BOOT"
25GRUB_HDDDIR = "${HDDDIR}${EFIDIR}"
26GRUB_ISODIR = "${ISODIR}${EFIDIR}"
27 25
28grubefi_populate() { 26grubefi_populate() {
27 # DEST must be the root of the image so that EFIDIR is not
28 # nested under a top level directory.
29 DEST=$1 29 DEST=$1
30 30
31 install -d ${DEST} 31 install -d ${DEST}${EFIDIR}
32
33 install -m 0644 ${STAGING_DIR_HOST}/kernel/bzImage ${DEST}/vmlinuz
34
35 if [ -n "${INITRD}" ] && [ -s "${INITRD}" ]; then
36 install -m 0644 ${INITRD} ${DEST}/initrd
37 fi
38
39 if [ -n "${ROOTFS}" ] && [ -s "${ROOTFS}" ]; then
40 install -m 0644 ${ROOTFS} ${DEST}/rootfs.img
41 fi
42 32
43 GRUB_IMAGE="bootia32.efi" 33 GRUB_IMAGE="bootia32.efi"
44 if [ "${TARGET_ARCH}" = "x86_64" ]; then 34 if [ "${TARGET_ARCH}" = "x86_64" ]; then
45 GRUB_IMAGE="bootx64.efi" 35 GRUB_IMAGE="bootx64.efi"
46 fi 36 fi
47 install -m 0644 ${DEPLOY_DIR_IMAGE}/${GRUB_IMAGE} ${DEST} 37 install -m 0644 ${DEPLOY_DIR_IMAGE}/${GRUB_IMAGE} ${DEST}${EFIDIR}
48 38
49 install -m 0644 ${GRUBCFG} ${DEST} 39 install -m 0644 ${GRUBCFG} ${DEST}${EFIDIR}
50} 40}
51 41
52grubefi_iso_populate() { 42grubefi_iso_populate() {
53 grubefi_populate ${GRUB_ISODIR} 43 grubefi_populate ${ISODIR}
54} 44}
55 45
56grubefi_hddimg_populate() { 46grubefi_hddimg_populate() {
57 grubefi_populate ${GRUB_HDDDIR} 47 grubefi_populate ${HDDDIR}
58} 48}
59 49
60python build_grub_cfg() { 50python build_grub_cfg() {
@@ -109,7 +99,7 @@ python build_grub_cfg() {
109 bb.data.update_data(localdata) 99 bb.data.update_data(localdata)
110 100
111 cfgfile.write('\nmenuentry \'%s\'{\n' % (label)) 101 cfgfile.write('\nmenuentry \'%s\'{\n' % (label))
112 cfgfile.write('linux ${EFIDIR}/vmlinuz LABEL=%s' % (label)) 102 cfgfile.write('linux /vmlinuz LABEL=%s' % (label))
113 103
114 append = localdata.getVar('APPEND', True) 104 append = localdata.getVar('APPEND', True)
115 initrd = localdata.getVar('INITRD', True) 105 initrd = localdata.getVar('INITRD', True)
@@ -119,7 +109,7 @@ python build_grub_cfg() {
119 cfgfile.write('\n') 109 cfgfile.write('\n')
120 110
121 if initrd: 111 if initrd:
122 cfgfile.write('initrd ${EFIDIR}/initrd') 112 cfgfile.write('initrd /initrd')
123 cfgfile.write('\n}\n') 113 cfgfile.write('\n}\n')
124 114
125 cfgfile.close() 115 cfgfile.close()