mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-24 06:24:17 +00:00
boot: pxe_utils: Add fallback support
When configured correctly, we can detect when boot fails after the boot process has been handed over to the kernel through the use of U-Boot's bootcount support. In some instances, such as when we are performing atomic updates via a system such as OSTree, it is desirable to provide a fallback option so that we can return to a previous (hopefully working) state. Add a "fallback" option to the supported extlinux configuration options that points to a label like "default" so that we can utilise this in later commits. Signed-off-by: Martyn Welch <martyn.welch@collabora.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
d2061828a4
commit
d2faad3ff3
3 changed files with 22 additions and 0 deletions
|
@ -781,6 +781,7 @@ enum token_type {
|
||||||
T_IPAPPEND,
|
T_IPAPPEND,
|
||||||
T_BACKGROUND,
|
T_BACKGROUND,
|
||||||
T_KASLRSEED,
|
T_KASLRSEED,
|
||||||
|
T_FALLBACK,
|
||||||
T_INVALID
|
T_INVALID
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -814,6 +815,7 @@ static const struct token keywords[] = {
|
||||||
{"ipappend", T_IPAPPEND,},
|
{"ipappend", T_IPAPPEND,},
|
||||||
{"background", T_BACKGROUND,},
|
{"background", T_BACKGROUND,},
|
||||||
{"kaslrseed", T_KASLRSEED,},
|
{"kaslrseed", T_KASLRSEED,},
|
||||||
|
{"fallback", T_FALLBACK,},
|
||||||
{NULL, T_INVALID}
|
{NULL, T_INVALID}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1356,6 +1358,18 @@ static int parse_pxefile_top(struct pxe_context *ctx, char *p, unsigned long bas
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case T_FALLBACK:
|
||||||
|
err = parse_sliteral(&p, &label_name);
|
||||||
|
|
||||||
|
if (label_name) {
|
||||||
|
if (cfg->fallback_label)
|
||||||
|
free(cfg->fallback_label);
|
||||||
|
|
||||||
|
cfg->fallback_label = label_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
case T_INCLUDE:
|
case T_INCLUDE:
|
||||||
err = handle_include(ctx, &p,
|
err = handle_include(ctx, &p,
|
||||||
base + ALIGN(strlen(b), 4), cfg,
|
base + ALIGN(strlen(b), 4), cfg,
|
||||||
|
@ -1395,6 +1409,7 @@ void destroy_pxe_menu(struct pxe_menu *cfg)
|
||||||
|
|
||||||
free(cfg->title);
|
free(cfg->title);
|
||||||
free(cfg->default_label);
|
free(cfg->default_label);
|
||||||
|
free(cfg->fallback_label);
|
||||||
|
|
||||||
list_for_each_safe(pos, n, &cfg->labels) {
|
list_for_each_safe(pos, n, &cfg->labels) {
|
||||||
label = list_entry(pos, struct pxe_label, list);
|
label = list_entry(pos, struct pxe_label, list);
|
||||||
|
|
|
@ -120,6 +120,11 @@ Unrecognized commands are ignored.
|
||||||
default <label> - the label named here is treated as the default and is
|
default <label> - the label named here is treated as the default and is
|
||||||
the first label 'pxe boot' attempts to boot.
|
the first label 'pxe boot' attempts to boot.
|
||||||
|
|
||||||
|
fallback <label> - the label named here is treated as a fallback option that
|
||||||
|
may be attempted should it be detected that booting of
|
||||||
|
the default has failed to complete, for example via
|
||||||
|
U-Boot's boot count limit functionality.
|
||||||
|
|
||||||
menu title <string> - sets a title for the menu of labels being displayed.
|
menu title <string> - sets a title for the menu of labels being displayed.
|
||||||
|
|
||||||
menu include <path> - use tftp to retrieve the pxe file at <path>, which
|
menu include <path> - use tftp to retrieve the pxe file at <path>, which
|
||||||
|
|
|
@ -62,6 +62,7 @@ struct pxe_label {
|
||||||
*
|
*
|
||||||
* title - the name of the menu as given by a 'menu title' line.
|
* title - the name of the menu as given by a 'menu title' line.
|
||||||
* default_label - the name of the default label, if any.
|
* default_label - the name of the default label, if any.
|
||||||
|
* fallback_label - the name of the fallback label, if any.
|
||||||
* bmp - the bmp file name which is displayed in background
|
* bmp - the bmp file name which is displayed in background
|
||||||
* timeout - time in tenths of a second to wait for a user key-press before
|
* timeout - time in tenths of a second to wait for a user key-press before
|
||||||
* booting the default label.
|
* booting the default label.
|
||||||
|
@ -73,6 +74,7 @@ struct pxe_label {
|
||||||
struct pxe_menu {
|
struct pxe_menu {
|
||||||
char *title;
|
char *title;
|
||||||
char *default_label;
|
char *default_label;
|
||||||
|
char *fallback_label;
|
||||||
char *bmp;
|
char *bmp;
|
||||||
int timeout;
|
int timeout;
|
||||||
int prompt;
|
int prompt;
|
||||||
|
|
Loading…
Add table
Reference in a new issue