.. SPDX-License-Identifier: GPL-2.0+
.. (C) Copyright 2011-2012 Pali Rohár <pali@kernel.org>

bootmenu command
================

Synopsis
--------
::

    bootmenu [delay]

Description
-----------

The "bootmenu" command uses U-Boot menu interfaces and provides
a simple mechanism for creating menus with different boot items.
The cursor keys "Up" and "Down" are used for navigation through
the items. Current active menu item is highlighted and can be
selected using the "Enter" key. The selection of the highlighted
menu entry invokes an U-Boot command (or a list of commands)
associated with this menu entry.

The "bootmenu" command interprets ANSI escape sequences, so
an ANSI terminal is required for proper menu rendering and item
selection.

The assembling of the menu is done via a set of environment variables
"bootmenu_<num>" and "bootmenu_delay", i.e.::

    bootmenu_delay=<delay>
    bootmenu_<num>="<title>=<commands>"

<delay>
    is the autoboot delay in seconds, after which the first
    menu entry will be selected automatically

<num>
    is the boot menu entry number, starting from zero

<title>
    is the text of the menu entry shown on the console
    or on the boot screen

<commands>
    are commands which will be executed when a menu
    entry is selected

Title and commands are separated by the first appearance of a '='
character in the value of the environment variable.

The first (optional) argument of the "bootmenu" command is a delay specifier
and it overrides the delay value defined by "bootmenu_delay" environment
variable. If the environment variable "bootmenu_delay" is not set or if
the argument of the "bootmenu" command is not specified, the default delay
will be CONFIG_BOOTDELAY. If delay is 0, no menu entries will be shown on
the console (or on the screen) and the command of the first menu entry will
be called immediately. If delay is less then 0, bootmenu will be shown and
autoboot will be disabled.

Bootmenu always adds menu entry "U-Boot console" at the end of all menu
entries specified by environment variables. When selecting this entry
the bootmenu terminates and the usual U-Boot command prompt is presented
to the user.

Example environment::

    setenv bootmenu_0 Boot 1. kernel=bootm 0x82000000  # Set first menu entry
    setenv bootmenu_1 Boot 2. kernel=bootm 0x83000000  # Set second menu entry
    setenv bootmenu_2 Reset board=reset                # Set third menu entry
    setenv bootmenu_3 U-Boot boot order=boot           # Set fourth menu entry
    bootmenu 20        # Run bootmenu with autoboot delay 20s


The above example will be rendered as below::

    *** U-Boot Boot Menu ***

       Boot 1. kernel
       Boot 2. kernel
       Reset board
       U-Boot boot order
       U-Boot console

    Hit any key to stop autoboot: 20
    Press UP/DOWN to move, ENTER to select

The selected menu entry will be highlighted - it will have inverted
background and text colors.

UEFI boot variable enumeration
''''''''''''''''''''''''''''''
If enabled, the bootmenu command will automatically generate and add
UEFI-related boot menu entries for the following items.

 * possible bootable media with default file names
 * user-defined UEFI boot options

The bootmenu automatically enumerates the possible bootable
media devices supporting EFI_SIMPLE_FILE_SYSTEM_PROTOCOL.
This auto generated entry is named as "<interface> <devnum>:<part>" format.
(e.g. "usb 0:1")

The bootmenu displays the UEFI-related menu entries in order of "BootOrder".
When the user selects the UEFI boot menu entry, the bootmenu sets
the selected boot variable index to "BootNext" without non-volatile attribute,
then call the uefi boot manager with the command "bootefi bootmgr".

Example bootmenu is as below::

    *** U-Boot Boot Menu ***

       mmc 0:1
       mmc 0:2
       debian
       nvme 0:1
       ubuntu
       nvme 0:2
       usb 0:2
       U-Boot console

Default behavior when user exits from the bootmenu
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
User can exit from bootmenu by selecting the last entry
"U-Boot console"/"Quit" or ESC/CTRL+C key.

When the CONFIG_BOOTMENU_DISABLE_UBOOT_CONSOLE is disabled,
user exits from the bootmenu and returns to the U-Boot console.

When the CONFIG_BOOTMENU_DISABLE_UBOOT_CONSOLE is enabled, user can not
enter the U-Boot console. When the user exits from the bootmenu,
the bootmenu invokes the following default behavior.

 * if CONFIG_CMD_BOOTEFI_BOOTMGR is enabled, execute "bootefi bootmgr" command
 * "bootefi bootmgr" fails or is not enabled, then execute "run bootcmd" command.

Configuration
-------------

The "bootmenu" command is enabled by::

    CONFIG_CMD_BOOTMENU=y

To run the bootmenu at startup add these additional settings::

    CONFIG_AUTOBOOT_KEYED=y
    CONFIG_BOOTDELAY=30
    CONFIG_AUTOBOOT_MENU_SHOW=y

UEFI boot variable enumeration is enabled by::

    CONFIG_CMD_BOOTEFI_BOOTMGR=y

To improve the product security, entering U-Boot console from bootmenu
can be disabled by::

    CONFIG_BOOTMENU_DISABLE_UBOOT_CONSOLE=y

To scan the discoverable devices connected to the buses such as
USB and PCIe prior to bootmenu showing up, CONFIG_PREBOOT can be
used to run the command before showing the bootmenu, i.e.::

    CONFIG_USE_PREBOOT=y
    CONFIG_PREBOOT="pci enum; usb start; scsi scan; nvme scan; virtio scan"
