diff options
Diffstat (limited to 'meta/classes/grub-efi.bbclass')
| -rw-r--r-- | meta/classes/grub-efi.bbclass | 37 |
1 files changed, 27 insertions, 10 deletions
diff --git a/meta/classes/grub-efi.bbclass b/meta/classes/grub-efi.bbclass index 5c80c177de..ae8ee382cd 100644 --- a/meta/classes/grub-efi.bbclass +++ b/meta/classes/grub-efi.bbclass @@ -7,24 +7,31 @@ # Provide grub-efi specific functions for building bootable images. # External variables -# ${INITRD} - indicates a filesystem image to use as an initrd (optional) +# ${INITRD} - indicates a list of filesystem images to concatenate and use as an initrd (optional) # ${ROOTFS} - indicates a filesystem image to include as the root filesystem (optional) # ${GRUB_GFXSERIAL} - set this to 1 to have graphics and serial in the boot menu # ${LABELS} - a list of targets for the automatic config # ${APPEND} - an override list of append strings for each label # ${GRUB_OPTS} - additional options to add to the config, ';' delimited # (optional) # ${GRUB_TIMEOUT} - timeout before executing the deault label (optional) +# ${GRUB_ROOT} - grub's root device. -do_bootimg[depends] += "grub-efi:do_deploy" -do_bootdirectdisk[depends] += "grub-efi:do_deploy" +do_bootimg[depends] += "${MLPREFIX}grub-efi:do_deploy" +do_bootdirectdisk[depends] += "${MLPREFIX}grub-efi:do_deploy" GRUB_SERIAL ?= "console=ttyS0,115200" -GRUBCFG = "${S}/grub.cfg" +GRUB_CFG_VM = "${S}/grub_vm.cfg" +GRUB_CFG_LIVE = "${S}/grub_live.cfg" GRUB_TIMEOUT ?= "10" #FIXME: build this from the machine config GRUB_OPTS ?= "serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1" EFIDIR = "/EFI/BOOT" +GRUB_ROOT ?= "${ROOT}" +APPEND ?= "" + +# Need UUID utility code. +inherit fs-uuid efi_populate() { # DEST must be the root of the image so that EFIDIR is not @@ -38,8 +45,10 @@ efi_populate() { GRUB_IMAGE="bootx64.efi" fi install -m 0644 ${DEPLOY_DIR_IMAGE}/${GRUB_IMAGE} ${DEST}${EFIDIR} + EFIPATH=$(echo "${EFIDIR}" | sed 's/\//\\/g') + printf 'fs0:%s\%s\n' "$EFIPATH" "$GRUB_IMAGE" >${DEST}/startup.nsh - install -m 0644 ${GRUBCFG} ${DEST}${EFIDIR} + install -m 0644 ${GRUB_CFG} ${DEST}${EFIDIR}/grub.cfg } efi_iso_populate() { @@ -49,7 +58,8 @@ efi_iso_populate() { mkdir -p ${EFIIMGDIR}/${EFIDIR} cp $iso_dir/${EFIDIR}/* ${EFIIMGDIR}${EFIDIR} cp $iso_dir/vmlinuz ${EFIIMGDIR} - echo "${GRUB_IMAGE}" > ${EFIIMGDIR}/startup.nsh + EFIPATH=$(echo "${EFIDIR}" | sed 's/\//\\/g') + echo "fs0:${EFIPATH}\\${GRUB_IMAGE}" > ${EFIIMGDIR}/startup.nsh if [ -f "$iso_dir/initrd" ] ; then cp $iso_dir/initrd ${EFIIMGDIR} fi @@ -78,14 +88,14 @@ python build_efi_cfg() { bb.debug(1, "No labels, nothing to do") return - cfile = d.getVar('GRUBCFG', True) + cfile = d.getVar('GRUB_CFG', True) if not cfile: - raise bb.build.FuncFailed('Unable to read GRUBCFG') + raise bb.build.FuncFailed('Unable to read GRUB_CFG') try: - cfgfile = file(cfile, 'w') + cfgfile = open(cfile, 'w') except OSError: - raise bb.build.funcFailed('Unable to open %s' % (cfile)) + raise bb.build.FuncFailed('Unable to open %s' % (cfile)) cfgfile.write('# Automatically created by OE\n') @@ -102,6 +112,10 @@ python build_efi_cfg() { else: cfgfile.write('timeout=50\n') + root = d.getVar('GRUB_ROOT', True) + if not root: + raise bb.build.FuncFailed('GRUB_ROOT not defined') + if gfxserial == "1": btypes = [ [ " graphics console", "" ], [ " serial console", d.getVar('GRUB_SERIAL', True) or "" ] ] @@ -125,10 +139,13 @@ python build_efi_cfg() { lb = "install-efi" cfgfile.write('linux /vmlinuz LABEL=%s' % (lb)) + cfgfile.write(' %s' % replace_rootfs_uuid(d, root)) + append = localdata.getVar('APPEND', True) initrd = localdata.getVar('INITRD', True) if append: + append = replace_rootfs_uuid(d, append) cfgfile.write('%s' % (append)) cfgfile.write(' %s' % btype[1]) cfgfile.write('\n') |
