Am 26. Dezember 2020 19:02:25 MEZ schrieb "Pali Rohár" <p...@kernel.org>: >When CTRL+C is pressed interrupt bootmenu and jump into U-Boot console. >As the last entry in bootmenu is always U-Boot console just choose the >last >entry when CTRL+C is pressed. > >It is useful when bootmenu is part of boot process and you want to >interrupt boot process by scripts which control U-Boot (serial) >console.
Wouldn't the escape key be a better choice? On the sandbox CTRL-C makes you quit U-Boot. When hitting CTRL-C late on other systems it might interrupt a follow-up command. -- The following is not directly related to your patch: Is it really a good design that a user cannot be stopped from reaching the console? I could think of use cases in the context of secure booting where you want to show a menu but you do not want to give access to the command line. Best regards Heinrich > >Signed-off-by: Pali Rohár <p...@kernel.org> >--- > cmd/bootmenu.c | 16 +++++++++++++++- > 1 file changed, 15 insertions(+), 1 deletion(-) > >diff --git a/cmd/bootmenu.c b/cmd/bootmenu.c >index 1ba7b622e5..9b56bfaa9a 100644 >--- a/cmd/bootmenu.c >+++ b/cmd/bootmenu.c >@@ -45,6 +45,7 @@ enum bootmenu_key { > KEY_UP, > KEY_DOWN, > KEY_SELECT, >+ KEY_QUIT, > }; > > static char *bootmenu_getoption(unsigned short int n) >@@ -109,6 +110,9 @@ static void bootmenu_autoboot_loop(struct >bootmenu_data *menu, > case '\r': > *key = KEY_SELECT; > break; >+ case 0x3: /* ^C */ >+ *key = KEY_QUIT; >+ break; > default: > *key = KEY_NONE; > break; >@@ -187,6 +191,10 @@ static void bootmenu_loop(struct bootmenu_data >*menu, > /* enter key was pressed */ > if (c == '\r') > *key = KEY_SELECT; >+ >+ /* ^C was pressed */ >+ if (c == 0x3) >+ *key = KEY_QUIT; > } > > static char *bootmenu_choice_entry(void *data) >@@ -222,6 +230,12 @@ static char *bootmenu_choice_entry(void *data) > for (i = 0; i < menu->active; ++i) > iter = iter->next; > return iter->key; >+ case KEY_QUIT: >+ /* Quit by choosing the last entry - U-Boot console */ >+ iter = menu->first; >+ while (iter->next) >+ iter = iter->next; >+ return iter->key; > default: > break; > } >@@ -389,7 +403,7 @@ static void menu_display_statusline(struct menu *m) > printf(ANSI_CURSOR_POSITION, menu->count + 5, 1); > puts(ANSI_CLEAR_LINE); > printf(ANSI_CURSOR_POSITION, menu->count + 6, 1); >- puts(" Press UP/DOWN to move, ENTER to select"); >+ puts(" Press UP/DOWN to move, ENTER to select, CTRL+C to quit"); > puts(ANSI_CLEAR_LINE_TO_END); > printf(ANSI_CURSOR_POSITION, menu->count + 7, 1); > puts(ANSI_CLEAR_LINE);