mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-06-09 23:36:03 +09:00
env: register erase command
this patch adds basic changes for adding a erase-subcommand to env with this command the environment stored on non-volatile storage written by saveenv can be cleared. Signed-off-by: Frank Wunderlich <frank-w@public-files.de> squashed fixes - start message with "Erasing" - mark erase-function as optional - env: separate eraseenv from saveenv Suggested-by: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com> Reviewed-by: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
This commit is contained in:
parent
4225f830c5
commit
cd121bdb6d
|
@ -408,6 +408,14 @@ config CMD_SAVEENV
|
||||||
Save all environment variables into the compiled-in persistent
|
Save all environment variables into the compiled-in persistent
|
||||||
storage.
|
storage.
|
||||||
|
|
||||||
|
config CMD_ERASEENV
|
||||||
|
bool "eraseenv"
|
||||||
|
default n
|
||||||
|
depends on CMD_SAVEENV
|
||||||
|
help
|
||||||
|
Erase environment variables from the compiled-in persistent
|
||||||
|
storage.
|
||||||
|
|
||||||
config CMD_ENV_EXISTS
|
config CMD_ENV_EXISTS
|
||||||
bool "env exists"
|
bool "env exists"
|
||||||
default y
|
default y
|
||||||
|
|
20
cmd/nvedit.c
20
cmd/nvedit.c
|
@ -767,6 +767,20 @@ U_BOOT_CMD(
|
||||||
"save environment variables to persistent storage",
|
"save environment variables to persistent storage",
|
||||||
""
|
""
|
||||||
);
|
);
|
||||||
|
|
||||||
|
#if defined(CONFIG_CMD_ERASEENV)
|
||||||
|
static int do_env_erase(cmd_tbl_t *cmdtp, int flag, int argc,
|
||||||
|
char * const argv[])
|
||||||
|
{
|
||||||
|
return env_erase() ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
U_BOOT_CMD(
|
||||||
|
eraseenv, 1, 0, do_env_erase,
|
||||||
|
"erase environment variables from persistent storage",
|
||||||
|
""
|
||||||
|
);
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#endif /* CONFIG_SPL_BUILD */
|
#endif /* CONFIG_SPL_BUILD */
|
||||||
|
|
||||||
|
@ -1316,6 +1330,9 @@ static cmd_tbl_t cmd_env_sub[] = {
|
||||||
#endif
|
#endif
|
||||||
#if defined(CONFIG_CMD_SAVEENV) && defined(ENV_IS_IN_DEVICE)
|
#if defined(CONFIG_CMD_SAVEENV) && defined(ENV_IS_IN_DEVICE)
|
||||||
U_BOOT_CMD_MKENT(save, 1, 0, do_env_save, "", ""),
|
U_BOOT_CMD_MKENT(save, 1, 0, do_env_save, "", ""),
|
||||||
|
#if defined(CONFIG_CMD_ERASEENV)
|
||||||
|
U_BOOT_CMD_MKENT(erase, 1, 0, do_env_erase, "", ""),
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
U_BOOT_CMD_MKENT(set, CONFIG_SYS_MAXARGS, 0, do_env_set, "", ""),
|
U_BOOT_CMD_MKENT(set, CONFIG_SYS_MAXARGS, 0, do_env_set, "", ""),
|
||||||
#if defined(CONFIG_CMD_ENV_EXISTS)
|
#if defined(CONFIG_CMD_ENV_EXISTS)
|
||||||
|
@ -1396,6 +1413,9 @@ static char env_help_text[] =
|
||||||
#endif
|
#endif
|
||||||
#if defined(CONFIG_CMD_SAVEENV) && defined(ENV_IS_IN_DEVICE)
|
#if defined(CONFIG_CMD_SAVEENV) && defined(ENV_IS_IN_DEVICE)
|
||||||
"env save - save environment\n"
|
"env save - save environment\n"
|
||||||
|
#if defined(CONFIG_CMD_ERASEENV)
|
||||||
|
"env erase - erase environment\n"
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#if defined(CONFIG_CMD_NVEDIT_EFI)
|
#if defined(CONFIG_CMD_NVEDIT_EFI)
|
||||||
"env set -e name [arg ...] - set UEFI variable; unset if 'arg' not specified\n"
|
"env set -e name [arg ...] - set UEFI variable; unset if 'arg' not specified\n"
|
||||||
|
|
30
env/env.c
vendored
30
env/env.c
vendored
|
@ -24,6 +24,8 @@ void env_fix_drivers(void)
|
||||||
entry->load += gd->reloc_off;
|
entry->load += gd->reloc_off;
|
||||||
if (entry->save)
|
if (entry->save)
|
||||||
entry->save += gd->reloc_off;
|
entry->save += gd->reloc_off;
|
||||||
|
if (entry->erase)
|
||||||
|
entry->erase += gd->reloc_off;
|
||||||
if (entry->init)
|
if (entry->init)
|
||||||
entry->init += gd->reloc_off;
|
entry->init += gd->reloc_off;
|
||||||
}
|
}
|
||||||
|
@ -254,6 +256,34 @@ int env_save(void)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int env_erase(void)
|
||||||
|
{
|
||||||
|
struct env_driver *drv;
|
||||||
|
|
||||||
|
drv = env_driver_lookup(ENVOP_ERASE, gd->env_load_prio);
|
||||||
|
if (drv) {
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (!drv->erase)
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
|
if (!env_has_inited(drv->location))
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
|
printf("Erasing Environment on %s... ", drv->name);
|
||||||
|
ret = drv->erase();
|
||||||
|
if (ret)
|
||||||
|
printf("Failed (%d)\n", ret);
|
||||||
|
else
|
||||||
|
printf("OK\n");
|
||||||
|
|
||||||
|
if (!ret)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
int env_init(void)
|
int env_init(void)
|
||||||
{
|
{
|
||||||
struct env_driver *drv;
|
struct env_driver *drv;
|
||||||
|
|
|
@ -200,6 +200,7 @@ enum env_operation {
|
||||||
ENVOP_INIT, /* we want to call the init function */
|
ENVOP_INIT, /* we want to call the init function */
|
||||||
ENVOP_LOAD, /* we want to call the load function */
|
ENVOP_LOAD, /* we want to call the load function */
|
||||||
ENVOP_SAVE, /* we want to call the save function */
|
ENVOP_SAVE, /* we want to call the save function */
|
||||||
|
ENVOP_ERASE, /* we want to call the erase function */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct env_driver {
|
struct env_driver {
|
||||||
|
@ -225,6 +226,15 @@ struct env_driver {
|
||||||
*/
|
*/
|
||||||
int (*save)(void);
|
int (*save)(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* erase() - Erase the environment on storage
|
||||||
|
*
|
||||||
|
* This method is optional and required for 'eraseenv' to work.
|
||||||
|
*
|
||||||
|
* @return 0 if OK, -ve on error
|
||||||
|
*/
|
||||||
|
int (*erase)(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* init() - Set up the initial pre-relocation environment
|
* init() - Set up the initial pre-relocation environment
|
||||||
*
|
*
|
||||||
|
@ -303,6 +313,13 @@ int env_load(void);
|
||||||
*/
|
*/
|
||||||
int env_save(void);
|
int env_save(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* env_erase() - Erase the environment on storage
|
||||||
|
*
|
||||||
|
* @return 0 if OK, -ve on error
|
||||||
|
*/
|
||||||
|
int env_erase(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* env_fix_drivers() - Updates envdriver as per relocation
|
* env_fix_drivers() - Updates envdriver as per relocation
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue
Block a user