From 5a2d11e845a52d932f9c546142fb58122ed2cba0 Mon Sep 17 00:00:00 2001 From: Jason Wessel Date: Tue, 17 Sep 2013 13:32:15 +0000 Subject: grub-efi.bbclass: Add serial and graphics menu options The syslinux.bbclass already has support for automatically generated serial and graphics menu choices. This patch adds the same concept to the grub-efi menu. That makes it possible to generate a single image which can boot on a PCBIOS or EFI firmware with consistent looking boot options. [YOCTO #4100] (From OE-Core rev: 8444199fb598012f54853b010b5e5cce750db89d) Signed-off-by: Jason Wessel Signed-off-by: Saul Wold Signed-off-by: Richard Purdie --- meta/classes/grub-efi.bbclass | 41 +++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-) (limited to 'meta/classes/grub-efi.bbclass') diff --git a/meta/classes/grub-efi.bbclass b/meta/classes/grub-efi.bbclass index c21babb293..591bee25ef 100644 --- a/meta/classes/grub-efi.bbclass +++ b/meta/classes/grub-efi.bbclass @@ -9,6 +9,7 @@ # External variables # ${INITRD} - indicates a filesystem image to 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) @@ -16,6 +17,7 @@ do_bootimg[depends] += "grub-efi-${TRANSLATED_TARGET_ARCH}-native:do_deploy" +GRUB_SERIAL ?= "console=ttyS0,115200" GRUBCFG = "${S}/grub.cfg" GRUB_TIMEOUT ?= "10" #FIXME: build this from the machine config @@ -63,6 +65,8 @@ python build_grub_cfg() { bb.error("WORKDIR not defined, unable to package") return + gfxserial = d.getVar('GRUB_GFXSERIAL', True) or "" + labels = d.getVar('LABELS', True) if not labels: bb.debug(1, "LABELS not defined, nothing to do") @@ -96,6 +100,12 @@ python build_grub_cfg() { else: cfgfile.write('timeout=50\n') + if gfxserial == "1": + btypes = [ [ " graphics console", "" ], + [ " serial console", d.getVar('GRUB_SERIAL', True) or "" ] ] + else: + btypes = [ [ "", "" ] ] + for label in labels.split(): localdata = d.createCopy() @@ -103,24 +113,27 @@ python build_grub_cfg() { if not overrides: raise bb.build.FuncFailed('OVERRIDES not defined') - localdata.setVar('OVERRIDES', label + ':' + overrides) - bb.data.update_data(localdata) + for btype in btypes: + localdata.setVar('OVERRIDES', label + ':' + overrides) + bb.data.update_data(localdata) - cfgfile.write('\nmenuentry \'%s\'{\n' % (label)) - if label == "install": - label = "install-efi" - cfgfile.write('linux /vmlinuz LABEL=%s' % (label)) + cfgfile.write('\nmenuentry \'%s%s\'{\n' % (label, btype[0])) + lb = label + if label == "install": + lb = "install-efi" + cfgfile.write('linux /vmlinuz LABEL=%s' % (lb)) - append = localdata.getVar('APPEND', True) - initrd = localdata.getVar('INITRD', True) + append = localdata.getVar('APPEND', True) + initrd = localdata.getVar('INITRD', True) - if append: - cfgfile.write('%s' % (append)) - cfgfile.write('\n') + if append: + cfgfile.write('%s' % (append)) + cfgfile.write(' %s' % btype[1]) + cfgfile.write('\n') - if initrd: - cfgfile.write('initrd /initrd') - cfgfile.write('\n}\n') + if initrd: + cfgfile.write('initrd /initrd') + cfgfile.write('\n}\n') cfgfile.close() } -- cgit v1.2.3-54-g00ecf