.. SPDX-License-Identifier: GPL-2.0+

Environment Variables
=====================

U-Boot supports user configuration using environment variables which
can be made persistent by saving to persistent storage, for example flash
memory.

Environment variables are set using "env set" (alias "setenv"), printed using
"env print" (alias "printenv"), and saved to persistent storage using
"env save" (alias "saveenv"). Using "env set"
without a value can be used to delete a variable from the
environment. As long as you don't save the environment, you are
working with an in-memory copy. In case the Flash area containing the
environment is erased by accident, a default environment is provided.

See :doc:`cmd/env` for details.

Some configuration is controlled by Environment Variables, so that setting the
variable can adjust the behaviour of U-Boot (e.g. autoboot delay, autoloading
from tftp).

Text-based Environment
----------------------

The default environment for a board is created using a `.env` environment file
using a simple text format. The base filename for this is defined by
`CONFIG_ENV_SOURCE_FILE`, or `CONFIG_SYS_BOARD` if that is empty.

The file must be in the board directory and have a .env extension, so
assuming that there is a board vendor, the resulting filename is therefore::

   board/<vendor>/<board>/<CONFIG_ENV_SOURCE_FILE>.env

or::

   board/<vendor>/<board>/<CONFIG_SYS_BOARD>.env

This is a plain text file where you can type your environment variables in
the form `var=value`. Blank lines and multi-line variables are supported.
The conversion script looks for a line that starts in column 1 with a string
and has an equals sign immediately afterwards. Spaces before the = are not
permitted. It is a good idea to indent your scripts so that only the 'var='
appears at the start of a line.

To add additional text to a variable you can use `var+=value`. This text is
merged into the variable during the make process and made available as a
single value to U-Boot. Variables can contain `+` characters but in the unlikely
event that you want to have a variable name ending in plus, put a backslash
before the `+` so that the script knows you are not adding to an existing
variable but assigning to a new one::

    maximum\+=value

This file can include C-style comments. Blank lines and multi-line
variables are supported, and you can use normal C preprocessor directives
and CONFIG defines from your board config also.

For example, for snapper9260 you would create a text file called
`board/bluewater/snapper9260.env` containing the environment text.

Example::

    stdout=serial
    #ifdef CONFIG_LCD
    stdout+=,lcd
    #endif
    bootcmd=
        /* U-Boot script for booting */

        if [ -z ${tftpserverip} ]; then
            echo "Use 'setenv tftpserverip a.b.c.d' to set IP address."
        fi

        usb start; setenv autoload n; bootp;
        tftpboot ${tftpserverip}:
        bootm
    failed=
        /* Print a message when boot fails */
        echo CONFIG_SYS_BOARD boot failed - please check your image
        echo Load address is CONFIG_SYS_LOAD_ADDR

If CONFIG_ENV_SOURCE_FILE is empty and the default filename is not present, then
the old-style C environment is used instead. See below.

Old-style C environment
-----------------------

Traditionally, the default environment is created in `include/env_default.h`,
and can be augmented by various `CONFIG` defines. See that file for details. In
particular you can define `CONFIG_EXTRA_ENV_SETTINGS` in your board file
to add environment variables.

Board maintainers are encouraged to migrate to the text-based environment as it
is easier to maintain. The distro-board script still requires the old-style
environment but work is underway to address this.


List of environment variables
-----------------------------

Some device configuration options can be set using environment variables. In
many cases the value in the default environment comes from a CONFIG option - see
`include/env_default.h`) for this.

This is most-likely not complete:

baudrate
    Used to set the baudrate of the UART - it defaults to CONFIG_BAUDRATE (which
    defaults to 115200).

bootdelay
    Delay before automatically running bootcmd. During this time the user
    can choose to enter the shell (or the boot menu if
    CONFIG_AUTOBOOT_MENU_SHOW=y):

    - 0 to autoboot with no delay, but you can stop it by key input.
    - -1 to disable autoboot.
    - -2 to autoboot with no delay and not check for abort

    The default value is defined by CONFIG_BOOTDELAY.
    The value of 'bootdelay' is overridden by the /config/bootdelay value in
    the device-tree if CONFIG_OF_CONTROL=y.

bootcmd
    The command that is run if the user does not enter the shell during the
    boot delay.

bootargs
    Command line arguments passed when booting an operating system or binary
    image

bootfile
    Name of the image to load with TFTP

bootm_low
    Memory range available for image processing in the bootm
    command can be restricted. This variable is given as
    a hexadecimal number and defines lowest address allowed
    for use by the bootm command. See also "bootm_size"
    environment variable. Address defined by "bootm_low" is
    also the base of the initial memory mapping for the Linux
    kernel -- see the description of CONFIG_SYS_BOOTMAPSZ and
    bootm_mapsize.

bootm_mapsize
    Size of the initial memory mapping for the Linux kernel.
    This variable is given as a hexadecimal number and it
    defines the size of the memory region starting at base
    address bootm_low that is accessible by the Linux kernel
    during early boot.  If unset, CONFIG_SYS_BOOTMAPSZ is used
    as the default value if it is defined, and bootm_size is
    used otherwise.

bootm_size
    Memory range available for image processing in the bootm
    command can be restricted. This variable is given as
    a hexadecimal number and defines the size of the region
    allowed for use by the bootm command. See also "bootm_low"
    environment variable.

bootstopkeysha256, bootdelaykey, bootstopkey
    See README.autoboot

updatefile
    Location of the software update file on a TFTP server, used
    by the automatic software update feature. Please refer to
    documentation in doc/README.update for more details.

autoload
    if set to "no" (any string beginning with 'n'),
    "bootp" and "dhcp" will just load perform a lookup of the
    configuration from the BOOTP server, but not try to
    load any image.

autostart
    if set to "yes", an image loaded using the "bootp", "dhcp",
    "rarpboot", "tftpboot" or "diskboot" commands will
    be automatically started (by internally calling
    "bootm")

    If unset, or set to "1"/"yes"/"true" (case insensitive, just the first
    character is enough), a standalone image
    passed to the "bootm" command will be copied to the load address
    (and eventually uncompressed), but NOT be started.
    This can be used to load and uncompress arbitrary
    data.

fdt_high
    if set this restricts the maximum address that the
    flattened device tree will be copied into upon boot.
    For example, if you have a system with 1 GB memory
    at physical address 0x10000000, while Linux kernel
    only recognizes the first 704 MB as low memory, you
    may need to set fdt_high as 0x3C000000 to have the
    device tree blob be copied to the maximum address
    of the 704 MB low memory, so that Linux kernel can
    access it during the boot procedure.

    If this is set to the special value 0xffffffff (32-bit machines) or
    0xffffffffffffffff (64-bit machines) then
    the fdt will not be copied at all on boot.  For this
    to work it must reside in writable memory, have
    sufficient padding on the end of it for u-boot to
    add the information it needs into it, and the memory
    must be accessible by the kernel. This usage is strongly discouraged
    however as it also stops U-Boot from ensuring the device tree starting
    address is properly aligned and a misaligned tree will cause OS failures.

fdtcontroladdr
    if set this is the address of the control flattened
    device tree used by U-Boot when CONFIG_OF_CONTROL is
    defined.

initrd_high
    restrict positioning of initrd images:
    If this variable is not set, initrd images will be
    copied to the highest possible address in RAM; this
    is usually what you want since it allows for
    maximum initrd size. If for some reason you want to
    make sure that the initrd image is loaded below the
    CONFIG_SYS_BOOTMAPSZ limit, you can set this environment
    variable to a value of "no" or "off" or "0".
    Alternatively, you can set it to a maximum upper
    address to use (U-Boot will still check that it
    does not overwrite the U-Boot stack and data).

    For instance, when you have a system with 16 MB
    RAM, and want to reserve 4 MB from use by Linux,
    you can do this by adding "mem=12M" to the value of
    the "bootargs" variable. However, now you must make
    sure that the initrd image is placed in the first
    12 MB as well - this can be done with::

        setenv initrd_high 00c00000

    If you set initrd_high to 0xffffffff (32-bit machines) or
    0xffffffffffffffff (64-bit machines), this is an
    indication to U-Boot that all addresses are legal
    for the Linux kernel, including addresses in flash
    memory. In this case U-Boot will NOT COPY the
    ramdisk at all. This may be useful to reduce the
    boot time on your system, but requires that this
    feature is supported by your Linux kernel. This usage however requires
    that the user ensure that there will be no overlap with other parts of the
    image such as the Linux kernel BSS. It should not be enabled by default
    and only done as part of optimizing a deployment.

ipaddr
    IP address; needed for tftpboot command

loadaddr
    Default load address for commands like "bootp",
    "rarpboot", "tftpboot", "loadb" or "diskboot".  Note that the optimal
    default values here will vary between architectures.  On 32bit ARM for
    example, some offset from start of memory is used as the Linux kernel
    zImage has a self decompressor and it's best if we stay out of where that
    will be working.

loads_echo
    see CONFIG_LOADS_ECHO

serverip
    TFTP server IP address; needed for tftpboot command

bootretry
    see CONFIG_BOOT_RETRY_TIME

bootdelaykey
    see CONFIG_AUTOBOOT_DELAY_STR

bootstopkey
    see CONFIG_AUTOBOOT_STOP_STR

ethprime
    controls which network interface is used first.

ethact
    controls which interface is currently active.
    For example you can do the following::

    => setenv ethact FEC
    => ping 192.168.0.1 # traffic sent on FEC
    => setenv ethact SCC
    => ping 10.0.0.1 # traffic sent on SCC

ethrotate
    When set to "no" U-Boot does not go through all
    available network interfaces.
    It just stays at the currently selected interface. When unset or set to
    anything other than "no", U-Boot does go through all
    available network interfaces.

netretry
    When set to "no" each network operation will
    either succeed or fail without retrying.
    When set to "once" the network operation will
    fail when all the available network interfaces
    are tried once without success.
    Useful on scripts which control the retry operation
    themselves.

silent_linux
    If set then Linux will be told to boot silently, by
    adding 'console=' to its command line. If "yes" it will be
    made silent. If "no" it will not be made silent. If
    unset, then it will be made silent if the U-Boot console
    is silent.

tftpsrcp
    If this is set, the value is used for TFTP's
    UDP source port.

tftpdstp
    If this is set, the value is used for TFTP's UDP
    destination port instead of the default port 69.

tftpblocksize
    Block size to use for TFTP transfers; if not set,
    we use the TFTP server's default block size

tftptimeout
    Retransmission timeout for TFTP packets (in milli-
    seconds, minimum value is 1000 = 1 second). Defines
    when a packet is considered to be lost so it has to
    be retransmitted. The default is 5000 = 5 seconds.
    Lowering this value may make downloads succeed
    faster in networks with high packet loss rates or
    with unreliable TFTP servers.

tftptimeoutcountmax
    maximum count of TFTP timeouts (no
    unit, minimum value = 0). Defines how many timeouts
    can happen during a single file transfer before that
    transfer is aborted. The default is 10, and 0 means
    'no timeouts allowed'. Increasing this value may help
    downloads succeed with high packet loss rates, or with
    unreliable TFTP servers or client hardware.

tftpwindowsize
    if this is set, the value is used for TFTP's
    window size as described by RFC 7440.
    This means the count of blocks we can receive before
    sending ack to server.

vlan
    When set to a value < 4095 the traffic over
    Ethernet is encapsulated/received over 802.1q
    VLAN tagged frames.

    Note: This appears not to be used in U-Boot. See `README.VLAN`.

bootpretryperiod
    Period during which BOOTP/DHCP sends retries.
    Unsigned value, in milliseconds. If not set, the period will
    be either the default (28000), or a value based on
    CONFIG_NET_RETRY_COUNT, if defined. This value has
    precedence over the value based on CONFIG_NET_RETRY_COUNT.

memmatches
    Number of matches found by the last 'ms' command, in hex

memaddr
    Address of the last match found by the 'ms' command, in hex,
    or 0 if none

mempos
    Index position of the last match found by the 'ms' command,
    in units of the size (.b, .w, .l) of the search

zbootbase
    (x86 only) Base address of the bzImage 'setup' block

zbootaddr
    (x86 only) Address of the loaded bzImage, typically
    BZIMAGE_LOAD_ADDR which is 0x100000


Image locations
---------------

The following image location variables contain the location of images
used in booting. The "Image" column gives the role of the image and is
not an environment variable name. The other columns are environment
variable names. "File Name" gives the name of the file on a TFTP
server, "RAM Address" gives the location in RAM the image will be
loaded to, and "Flash Location" gives the image's address in NOR
flash or offset in NAND flash.

*Note* - these variables don't have to be defined for all boards, some
boards currently use other variables for these purposes, and some
boards use these variables for other purposes.

Also note that most of these variables are just a commonly used set of variable
names, used in some other variable definitions, but are not hard-coded anywhere
in U-Boot code.

================= ============== ================ ==============
Image             File Name      RAM Address      Flash Location
================= ============== ================ ==============
Linux kernel      bootfile       kernel_addr_r    kernel_addr
device tree blob  fdtfile        fdt_addr_r       fdt_addr
ramdisk           ramdiskfile    ramdisk_addr_r   ramdisk_addr
================= ============== ================ ==============


Automatically updated variables
-------------------------------

The following environment variables may be used and automatically
updated by the network boot commands ("bootp" and "rarpboot"),
depending the information provided by your boot server:

=========  ===================================================
Variable   Notes
=========  ===================================================
bootfile   see above
dnsip      IP address of your Domain Name Server
dnsip2     IP address of your secondary Domain Name Server
gatewayip  IP address of the Gateway (Router) to use
hostname   Target hostname
ipaddr     See above
netmask    Subnet Mask
rootpath   Pathname of the root filesystem on the NFS server
serverip   see above
=========  ===================================================


Special environment variables
-----------------------------

There are two special Environment Variables:

serial#
    contains hardware identification information such as type string and/or
    serial number
ethaddr
    Ethernet address. If CONFIG_REGEX=y, also eth*addr (where * is an integer).

These variables can be set only once (usually during manufacturing of
the board). U-Boot refuses to delete or overwrite these variables
once they have been set, unless CONFIG_ENV_OVERWRITE is enabled in the board
configuration.

Also:

ver
    Contains the U-Boot version string as printed
    with the "version" command. This variable is
    readonly (see CONFIG_VERSION_VARIABLE).

Please note that changes to some configuration parameters may take
only effect after the next boot (yes, that's just like Windows).


External environment file
-------------------------

The `CONFIG_USE_DEFAULT_ENV_FILE` option provides a way to bypass the
environment generation in U-Boot. If enabled, then `CONFIG_DEFAULT_ENV_FILE`
provides the name of a file which is converted into the environment,
completely bypassing the standard environment variables in `env_default.h`.

The format is the same as accepted by the mkenvimage tool, with lines containing
key=value pairs. Blank lines and lines beginning with # are ignored.

Future work may unify this feature with the text-based environment, perhaps
moving the contents of `env_default.h` to a text file.

Implementation
--------------

See :doc:`../develop/environment` for internal development details.
