[U-Boot] where *precisely* is u-boot's environment stored?
Måns Rullgård
mans at mansr.com
Wed Jul 6 12:06:59 CEST 2016
"Robert P. J. Day" <rpjday at crashcourse.ca> writes:
> oh, wait, i think i just answered some of my questions based on this
> snippet from common/env_nvram.c:
>
> /*
> * Initialize Environment use
> *
> * We are still running from ROM, so data use is limited
> */
> int env_init(void)
> {
> #if defined(CONFIG_SYS_NVRAM_ACCESS_ROUTINE)
> ulong crc;
> uchar data[ENV_SIZE];
>
> nvram_read(&crc, CONFIG_ENV_ADDR, sizeof(ulong));
> nvram_read(data, CONFIG_ENV_ADDR + sizeof(ulong), ENV_SIZE);
>
> if (crc32(0, data, ENV_SIZE) == crc) {
> gd->env_addr = (ulong)CONFIG_ENV_ADDR + sizeof(long);
> #else
> if (crc32(0, env_ptr->data, ENV_SIZE) == env_ptr->crc) {
> gd->env_addr = (ulong)&env_ptr->data;
> #endif
> gd->env_valid = 1;
> } else {
> gd->env_addr = (ulong)&default_environment[0];
> gd->env_valid = 0;
> }
>
> return 0;
> }
>
> so if there is a valid environment at the address specified by the
> board header file, it's used, otherwise fall back to
> default_environment[]. i had suspected it was something like that, i
> just hadn't found the code yet.
>
> is this written up somewhere?
Looks like you found your answer, at least in part. The environment is
stored in one of many possible locations, see the various env_*.c files.
Which one is used is determined by the board configuration.
> p.s. how does the default environment get to the CONFIG_ENV_ADDR
> defined in the board header file? is that done automatically when
> u-boot starts to run and notices that there is no valid environment
> info at that address, and therefore copies it for you?
If the stored environment is invalid (e.g. uninitialised), the built-in
default is used. Nothing is written until you issue a saveenv command.
This saves a copy of the live environment to the configured location.
--
Måns Rullgård
More information about the U-Boot
mailing list