467 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
			
		
		
	
	
			467 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
.. 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.
 | 
						|
 | 
						|
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.
 | 
						|
 | 
						|
ipaddr
 | 
						|
    IP address; needed for tftpboot command
 | 
						|
 | 
						|
loadaddr
 | 
						|
    Default load address for commands like "bootp",
 | 
						|
    "rarpboot", "tftpboot", "loadb" or "diskboot"
 | 
						|
 | 
						|
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 valu 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
 | 
						|
================= ============== ================ ==============
 | 
						|
u-boot            u-boot         u-boot_addr_r    u-boot_addr
 | 
						|
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.
 |