[PATCH v2 5/6] cmd: bootmenu: add parameter -e for UEFI boot options
Heinrich Schuchardt
heinrich.schuchardt at canonical.com
Wed Nov 27 08:06:30 CET 2024
The bootmenu command can display
* menu entries defined by environment variables
* menu entries defined by UEFI boot options
Not in all cases showing the UEFI boot options is desired.
Provide a new parameter '-e' to select the display of UEFI boot options.
Reviewed-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt at canonical.com>
---
v2:
no change
---
cmd/bootmenu.c | 39 +++++++++++++++++++++++++++++---------
doc/usage/cmd/bootmenu.rst | 13 ++++++++++---
2 files changed, 40 insertions(+), 12 deletions(-)
diff --git a/cmd/bootmenu.c b/cmd/bootmenu.c
index ffa63a4628d..90f4f3d583c 100644
--- a/cmd/bootmenu.c
+++ b/cmd/bootmenu.c
@@ -330,7 +330,13 @@ static int prepare_uefi_bootorder_entry(struct bootmenu_data *menu,
}
#endif
-static struct bootmenu_data *bootmenu_create(int delay)
+/**
+ * bootmenu_create() - create boot menu entries
+ *
+ * @uefi: consider UEFI boot options
+ * @delay: autostart delay in seconds
+ */
+static struct bootmenu_data *bootmenu_create(int uefi, int delay)
{
int ret;
unsigned short int i = 0;
@@ -357,7 +363,7 @@ static struct bootmenu_data *bootmenu_create(int delay)
goto cleanup;
#if (IS_ENABLED(CONFIG_CMD_BOOTEFI_BOOTMGR)) && (IS_ENABLED(CONFIG_CMD_EFICONFIG))
- if (i < MAX_COUNT - 1) {
+ if (uefi && i < MAX_COUNT - 1) {
efi_status_t efi_ret;
/*
@@ -481,7 +487,13 @@ static void handle_uefi_bootnext(void)
run_command("bootefi bootmgr", 0);
}
-static enum bootmenu_ret bootmenu_show(int delay)
+/**
+ * bootmenu_show - display boot menu
+ *
+ * @uefi: generated entries for UEFI boot options
+ * @delay: autoboot delay in seconds
+ */
+static enum bootmenu_ret bootmenu_show(int uefi, int delay)
{
int cmd_ret;
int init = 0;
@@ -495,7 +507,7 @@ static enum bootmenu_ret bootmenu_show(int delay)
efi_status_t efi_ret = EFI_SUCCESS;
char *option, *sep;
- if (IS_ENABLED(CONFIG_CMD_BOOTEFI_BOOTMGR))
+ if (IS_ENABLED(CONFIG_CMD_BOOTEFI_BOOTMGR) && uefi)
handle_uefi_bootnext();
/* If delay is 0 do not create menu, just run first entry */
@@ -514,7 +526,7 @@ static enum bootmenu_ret bootmenu_show(int delay)
return (cmd_ret == CMD_RET_SUCCESS ? BOOTMENU_RET_SUCCESS : BOOTMENU_RET_FAIL);
}
- bootmenu = bootmenu_create(delay);
+ bootmenu = bootmenu_create(uefi, delay);
if (!bootmenu)
return BOOTMENU_RET_FAIL;
@@ -609,7 +621,7 @@ int menu_show(int bootdelay)
int ret;
while (1) {
- ret = bootmenu_show(bootdelay);
+ ret = bootmenu_show(1, bootdelay);
bootdelay = -1;
if (ret == BOOTMENU_RET_UPDATED)
continue;
@@ -635,11 +647,19 @@ int do_bootmenu(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
{
char *delay_str = NULL;
int delay = 10;
+ int uefi = 0;
#if defined(CONFIG_BOOTDELAY) && (CONFIG_BOOTDELAY >= 0)
delay = CONFIG_BOOTDELAY;
#endif
+ if (argc >= 2) {
+ if (!strcmp("-e", argv[1])) {
+ uefi = 1;
+ --argc;
+ ++argv;
+ }
+ }
if (argc >= 2)
delay_str = argv[1];
@@ -649,13 +669,14 @@ int do_bootmenu(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
if (delay_str)
delay = (int)simple_strtol(delay_str, NULL, 10);
- bootmenu_show(delay);
+ bootmenu_show(uefi, delay);
return 0;
}
U_BOOT_CMD(
bootmenu, 2, 1, do_bootmenu,
"ANSI terminal bootmenu",
- "[delay]\n"
- " - show ANSI terminal bootmenu with autoboot delay"
+ "[-e] [delay]\n"
+ "-e - show UEFI entries\n"
+ "delay - show ANSI terminal bootmenu with autoboot delay"
);
diff --git a/doc/usage/cmd/bootmenu.rst b/doc/usage/cmd/bootmenu.rst
index 294cc02b17a..cd5597bc646 100644
--- a/doc/usage/cmd/bootmenu.rst
+++ b/doc/usage/cmd/bootmenu.rst
@@ -11,7 +11,7 @@ Synopsis
--------
::
- bootmenu [delay]
+ bootmenu [-e] [delay]
Description
-----------
@@ -28,6 +28,14 @@ The "bootmenu" command interprets ANSI escape sequences, so
an ANSI terminal is required for proper menu rendering and item
selection.
+-e
+ show menu entries based on UEFI boot options
+
+delay
+ is the autoboot delay in seconds, after which the first
+ menu entry will be selected automatically
+
+
The assembling of the menu is done via a set of environment variables
"bootmenu_<num>" and "bootmenu_delay", i.e.::
@@ -35,8 +43,7 @@ The assembling of the menu is done via a set of environment variables
bootmenu_<num>="<title>=<commands>"
<delay>
- is the autoboot delay in seconds, after which the first
- menu entry will be selected automatically
+ autostart delay in seconds
<num>
is the boot menu entry number, starting from zero
--
2.45.2
More information about the U-Boot
mailing list