Openembedded Core Discussions
 help / color / mirror / Atom feed
* [PATCH] wic: isoimage-isohybrid: implement grubefi menu logic
@ 2016-04-18 12:46 Ioan-Adrian Ratiu
  2016-04-18 13:24 ` Ed Bartosh
  0 siblings, 1 reply; 6+ messages in thread
From: Ioan-Adrian Ratiu @ 2016-04-18 12:46 UTC (permalink / raw)
  To: openembedded-core

Right now isoimage-isohybrid creates a single boot menu entry "boot"
and passes it the arguments supplied with "--append". There is logic
for creating custom grub menus, but it is sadly not used. "boot" is
hardcoded.

This change makes isoimage use the wic bootloader "--menu" argument to
create its menus. The syntax used for menu specification was chosen so
it does not conflict with the kernel parameter syntax (you can pass
custom kernel arguments from the generated grub menu entries, like for
example silent booting, thread affinity etc.).

The "--menu" argument syntax is as following. The argument supplies a
collection of menu entry names and kernel parameters. Menu name entries
can contain any ASCII character except | or : which are separators.
Kernel parameters obey the syntax defined by the kernel documentation.
| is the menu separator and : is the separator between the menu names
and parameters.

Example for use in wks files:
  --menu "Menu Name:firstarg,secondard|Menu Name 2:anotherarg,otherarg"

Signed-off-by: Ioan-Adrian Ratiu <adrian.ratiu@ni.com>
---
 .../lib/wic/plugins/source/isoimage-isohybrid.py   | 35 ++++++++++++++++------
 1 file changed, 26 insertions(+), 9 deletions(-)

diff --git a/scripts/lib/wic/plugins/source/isoimage-isohybrid.py b/scripts/lib/wic/plugins/source/isoimage-isohybrid.py
index bc99283..4b0b035 100644
--- a/scripts/lib/wic/plugins/source/isoimage-isohybrid.py
+++ b/scripts/lib/wic/plugins/source/isoimage-isohybrid.py
@@ -101,23 +101,40 @@ class IsoImagePlugin(SourcePlugin):
             splashline = ""
 
         bootloader = creator.ks.bootloader
+        kernel = "/bzImage"
+        default_options = bootloader.append
+        default_menu_to_boot = "Default boot"
+        grub_menus = ""
+
+        # menu separators are '|', custom boot args separated by ':', ex.
+        # --menu "Menu Name:firstarg,secondard|Menu Name 2:anotherarg,otherarg"
+        for menu in bootloader.menus.split('|'):
+            menu_list = menu.split(":")
+            menu_name = menu_list[0]
+            grub_menu_options = ""
+
+            if (len(menu_list) > 1):
+                menu_params = menu_list[1]
+                for param in menu_params.split(','):
+                    if param.lower() == "default":
+                        default_menu_to_boot = menu_name
+                    else: grub_menu_options += " " + param
+
+            grub_menus += "menuentry '%s' {\n" % menu_name
+            grub_menus += "linux %s rootwait %s %s\n" % \
+                (kernel, default_options, grub_menu_options)
+            grub_menus += "initrd /initrd \n"
+            grub_menus += "}\n"
 
         grubefi_conf = ""
         grubefi_conf += "serial --unit=0 --speed=115200 --word=8 "
         grubefi_conf += "--parity=no --stop=1\n"
-        grubefi_conf += "default=boot\n"
+        grubefi_conf += "default=%s\n" % default_menu_to_boot
         grubefi_conf += "timeout=%s\n" % (bootloader.timeout or 10)
         grubefi_conf += "\n"
         grubefi_conf += "search --set=root --label %s " % part.label
         grubefi_conf += "\n"
-        grubefi_conf += "menuentry 'boot'{\n"
-
-        kernel = "/bzImage"
-
-        grubefi_conf += "linux %s rootwait %s\n" \
-            % (kernel, bootloader.append)
-        grubefi_conf += "initrd /initrd \n"
-        grubefi_conf += "}\n"
+        grubefi_conf += grub_menus
 
         if splashline:
             grubefi_conf += "%s\n" % splashline
-- 
2.8.0



^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2016-04-20  8:37 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-04-18 12:46 [PATCH] wic: isoimage-isohybrid: implement grubefi menu logic Ioan-Adrian Ratiu
2016-04-18 13:24 ` Ed Bartosh
2016-04-19 12:17   ` Ioan-Adrian Ratiu
2016-04-19 10:15     ` Ed Bartosh
2016-04-20  7:45       ` Ioan-Adrian Ratiu
2016-04-20  6:17         ` Ed Bartosh

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox