U‐Boot Environment - analogdevicesinc/lnxdsp-adi-meta GitHub Wiki
This page contains information about using and working with the U-Boot environment.
The U-Boot envionrment is a text-based key-value store within U-Boot, used to store information such as board-specific commands, run-time configuration options, network information and settings, filesystem settings and more.
Some Examples include:
- The board's IP address - can be set manually or by DHCP
- Names of files used to boot the system - such as a fitimage, jffs2 filesystem, etc.
- Commands to update various parts of the system, such as U-Boot, the fitImage, linux's rootfs, etc.
- Autoboot options, such as the boot delay and key used to stop autoboot
By default (on ADSP boards), a persistent copy of the environment is stored in the SPI Flash. This is loaded automatically on boot to populate the in-memory environment. If no valid environment is present in the flash - e.g. if the flash has been erased or corrupted - a default environment is loaded instead.
More information on the environment, and many of the environment variables used by U-Boot, see Environment Variables in the U-Boot docs.
U-Boot provides the env command to interact with the environment. The basic commands are:
-
env set <name> [value](aliassetenv) - set valuenametovalue, or deletesnameifvalueis not present. -
env print [name](aliasprintenv) - print valuename, or the whole environment ifnameis not present. -
env default (-a | name ...)- set one of more values specified bynameto their default values, or reset the entire environment if-aspecified.(Note: only modifies the in-memory copy - also run
saveenvto reset the persistent copy) -
env loadandenv save(aliassaveenv) - load/save the environment from persistent storage - uses the SPI Flash on ADSP boards.
For a full command listing, see env command in the U-Boot docs.
The edit <name> command is also provided to interactively edit the contents of environment variable name.
There are two main ways to use environment variables:
- The
runcommand will execute the contents of a variable. For example, theupdate_spicommand is stored as an environment variable, so is executed usingrun update_spi. - Using curly-brace notation, similarly to Unix shells. For example,
tftpboot ${tftpserverip}will boot using the IP stored intftpserveripas the server address.
By default, the environment is stored on the SPI Flash on ADSP boards. The default location varies by board:
| Boards | Location |
|---|---|
| SC573, SC584, SC589 | 0xD0000 |
| SC594, SC598-ezlite | 0x100000 |
| SC598-ezkit | 0x180000 |
This is controlled by the config option CONFIG_ENV_OFFSET, usually set in the defconfig file for the relevant board (e.g. configs/sc598-som-ezkit-spl_defconfig for the SC598, running without Falcon enabled). Modifying the CONFIG_ENV_OFFSET=... line in the relevant file will change where it is stored.
BEWARE - the persistent environment is not updated when flashing U-Boot. Any changes previously made to the environment, either manually or by a U-Boot configuration option, may persist after updating U-Boot and cause unexpected behaviour. It is therefore recommended to reset the environment to the default after changing U-Boot configuration options, using:
=> env default -f -a
=> env save
As previously described, when U-Boot is unable to load a valid environment from the persistent storage, it will load the default environment. This is defined by a number of configuration options, within the include/configs directory in U-Boot's source.
Some common values are defined under CFG_EXTRA_ENV_SETTINGS in sc_adi_common.h, with board specific options being defined with ADI_ENV_SETTINGS in the relevant board file - for example, for SC598, in sc598-som.h.
The default environment can also be manually loaded using the env default command, described in env command.