mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-26 07:17:10 +00:00
cmd: bootmenu: add parameter -e for UEFI boot options
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@linaro.org> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
This commit is contained in:
parent
1f68057e03
commit
5a4ac8a35a
2 changed files with 40 additions and 12 deletions
|
@ -330,7 +330,13 @@ static int prepare_uefi_bootorder_entry(struct bootmenu_data *menu,
|
||||||
}
|
}
|
||||||
#endif
|
#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;
|
int ret;
|
||||||
unsigned short int i = 0;
|
unsigned short int i = 0;
|
||||||
|
@ -357,7 +363,7 @@ static struct bootmenu_data *bootmenu_create(int delay)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
#if (IS_ENABLED(CONFIG_CMD_BOOTEFI_BOOTMGR)) && (IS_ENABLED(CONFIG_CMD_EFICONFIG))
|
#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;
|
efi_status_t efi_ret;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -481,7 +487,13 @@ static void handle_uefi_bootnext(void)
|
||||||
run_command("bootefi bootmgr", 0);
|
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 cmd_ret;
|
||||||
int init = 0;
|
int init = 0;
|
||||||
|
@ -495,7 +507,7 @@ static enum bootmenu_ret bootmenu_show(int delay)
|
||||||
efi_status_t efi_ret = EFI_SUCCESS;
|
efi_status_t efi_ret = EFI_SUCCESS;
|
||||||
char *option, *sep;
|
char *option, *sep;
|
||||||
|
|
||||||
if (IS_ENABLED(CONFIG_CMD_BOOTEFI_BOOTMGR))
|
if (IS_ENABLED(CONFIG_CMD_BOOTEFI_BOOTMGR) && uefi)
|
||||||
handle_uefi_bootnext();
|
handle_uefi_bootnext();
|
||||||
|
|
||||||
/* If delay is 0 do not create menu, just run first entry */
|
/* 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);
|
return (cmd_ret == CMD_RET_SUCCESS ? BOOTMENU_RET_SUCCESS : BOOTMENU_RET_FAIL);
|
||||||
}
|
}
|
||||||
|
|
||||||
bootmenu = bootmenu_create(delay);
|
bootmenu = bootmenu_create(uefi, delay);
|
||||||
if (!bootmenu)
|
if (!bootmenu)
|
||||||
return BOOTMENU_RET_FAIL;
|
return BOOTMENU_RET_FAIL;
|
||||||
|
|
||||||
|
@ -609,7 +621,7 @@ int menu_show(int bootdelay)
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
ret = bootmenu_show(bootdelay);
|
ret = bootmenu_show(1, bootdelay);
|
||||||
bootdelay = -1;
|
bootdelay = -1;
|
||||||
if (ret == BOOTMENU_RET_UPDATED)
|
if (ret == BOOTMENU_RET_UPDATED)
|
||||||
continue;
|
continue;
|
||||||
|
@ -635,11 +647,19 @@ int do_bootmenu(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
|
||||||
{
|
{
|
||||||
char *delay_str = NULL;
|
char *delay_str = NULL;
|
||||||
int delay = 10;
|
int delay = 10;
|
||||||
|
int uefi = 0;
|
||||||
|
|
||||||
#if defined(CONFIG_BOOTDELAY) && (CONFIG_BOOTDELAY >= 0)
|
#if defined(CONFIG_BOOTDELAY) && (CONFIG_BOOTDELAY >= 0)
|
||||||
delay = CONFIG_BOOTDELAY;
|
delay = CONFIG_BOOTDELAY;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (argc >= 2) {
|
||||||
|
if (!strcmp("-e", argv[1])) {
|
||||||
|
uefi = 1;
|
||||||
|
--argc;
|
||||||
|
++argv;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (argc >= 2)
|
if (argc >= 2)
|
||||||
delay_str = argv[1];
|
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)
|
if (delay_str)
|
||||||
delay = (int)simple_strtol(delay_str, NULL, 10);
|
delay = (int)simple_strtol(delay_str, NULL, 10);
|
||||||
|
|
||||||
bootmenu_show(delay);
|
bootmenu_show(uefi, delay);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
U_BOOT_CMD(
|
U_BOOT_CMD(
|
||||||
bootmenu, 2, 1, do_bootmenu,
|
bootmenu, 2, 1, do_bootmenu,
|
||||||
"ANSI terminal bootmenu",
|
"ANSI terminal bootmenu",
|
||||||
"[delay]\n"
|
"[-e] [delay]\n"
|
||||||
" - show ANSI terminal bootmenu with autoboot delay"
|
"-e - show UEFI entries\n"
|
||||||
|
"delay - show ANSI terminal bootmenu with autoboot delay"
|
||||||
);
|
);
|
||||||
|
|
|
@ -11,7 +11,7 @@ Synopsis
|
||||||
--------
|
--------
|
||||||
::
|
::
|
||||||
|
|
||||||
bootmenu [delay]
|
bootmenu [-e] [delay]
|
||||||
|
|
||||||
Description
|
Description
|
||||||
-----------
|
-----------
|
||||||
|
@ -28,6 +28,14 @@ The "bootmenu" command interprets ANSI escape sequences, so
|
||||||
an ANSI terminal is required for proper menu rendering and item
|
an ANSI terminal is required for proper menu rendering and item
|
||||||
selection.
|
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
|
The assembling of the menu is done via a set of environment variables
|
||||||
"bootmenu_<num>" and "bootmenu_delay", i.e.::
|
"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>"
|
bootmenu_<num>="<title>=<commands>"
|
||||||
|
|
||||||
<delay>
|
<delay>
|
||||||
is the autoboot delay in seconds, after which the first
|
autostart delay in seconds
|
||||||
menu entry will be selected automatically
|
|
||||||
|
|
||||||
<num>
|
<num>
|
||||||
is the boot menu entry number, starting from zero
|
is the boot menu entry number, starting from zero
|
||||||
|
|
Loading…
Add table
Reference in a new issue