blob: 28a8952b7528cfb9ea5f0241077cb1dcbad7627c [file] [log] [blame]
Simon Glassea754aa2021-10-21 21:08:45 -06001.. SPDX-License-Identifier: GPL-2.0+
2
3Environment Variables
4=====================
5
Simon Glass40b9e0d2021-10-21 21:08:50 -06006U-Boot supports user configuration using environment variables which
Simon Glass5ba9e012021-10-21 21:08:49 -06007can be made persistent by saving to persistent storage, for example flash
8memory.
Simon Glassea754aa2021-10-21 21:08:45 -06009
Simon Glass40b9e0d2021-10-21 21:08:50 -060010Environment variables are set using "env set" (alias "setenv"), printed using
Simon Glass5ba9e012021-10-21 21:08:49 -060011"env print" (alias "printenv"), and saved to persistent storage using
12"env save" (alias "saveenv"). Using "env set"
Simon Glassea754aa2021-10-21 21:08:45 -060013without a value can be used to delete a variable from the
Simon Glass5ba9e012021-10-21 21:08:49 -060014environment. As long as you don't save the environment, you are
Simon Glassea754aa2021-10-21 21:08:45 -060015working with an in-memory copy. In case the Flash area containing the
16environment is erased by accident, a default environment is provided.
17
Patrick Delaunayfe869e12022-04-14 19:07:05 +020018See :doc:`cmd/env` for details.
19
Simon Glass5ba9e012021-10-21 21:08:49 -060020Some configuration is controlled by Environment Variables, so that setting the
21variable can adjust the behaviour of U-Boot (e.g. autoboot delay, autoloading
22from tftp).
Simon Glassea754aa2021-10-21 21:08:45 -060023
Simon Glass86b9c3e2021-10-21 21:08:46 -060024Text-based Environment
25----------------------
26
27The default environment for a board is created using a `.env` environment file
28using a simple text format. The base filename for this is defined by
29`CONFIG_ENV_SOURCE_FILE`, or `CONFIG_SYS_BOARD` if that is empty.
30
31The file must be in the board directory and have a .env extension, so
32assuming that there is a board vendor, the resulting filename is therefore::
33
34 board/<vendor>/<board>/<CONFIG_ENV_SOURCE_FILE>.env
35
36or::
37
38 board/<vendor>/<board>/<CONFIG_SYS_BOARD>.env
39
40This is a plain text file where you can type your environment variables in
41the form `var=value`. Blank lines and multi-line variables are supported.
42The conversion script looks for a line that starts in column 1 with a string
43and has an equals sign immediately afterwards. Spaces before the = are not
44permitted. It is a good idea to indent your scripts so that only the 'var='
45appears at the start of a line.
46
47To add additional text to a variable you can use `var+=value`. This text is
48merged into the variable during the make process and made available as a
49single value to U-Boot. Variables can contain `+` characters but in the unlikely
50event that you want to have a variable name ending in plus, put a backslash
51before the `+` so that the script knows you are not adding to an existing
52variable but assigning to a new one::
53
54 maximum\+=value
55
56This file can include C-style comments. Blank lines and multi-line
57variables are supported, and you can use normal C preprocessor directives
58and CONFIG defines from your board config also.
59
60For example, for snapper9260 you would create a text file called
61`board/bluewater/snapper9260.env` containing the environment text.
62
63Example::
64
65 stdout=serial
66 #ifdef CONFIG_LCD
67 stdout+=,lcd
68 #endif
69 bootcmd=
70 /* U-Boot script for booting */
71
72 if [ -z ${tftpserverip} ]; then
73 echo "Use 'setenv tftpserverip a.b.c.d' to set IP address."
74 fi
75
76 usb start; setenv autoload n; bootp;
77 tftpboot ${tftpserverip}:
78 bootm
79 failed=
80 /* Print a message when boot fails */
81 echo CONFIG_SYS_BOARD boot failed - please check your image
82 echo Load address is CONFIG_SYS_LOAD_ADDR
83
84If CONFIG_ENV_SOURCE_FILE is empty and the default filename is not present, then
85the old-style C environment is used instead. See below.
86
87Old-style C environment
88-----------------------
89
90Traditionally, the default environment is created in `include/env_default.h`,
91and can be augmented by various `CONFIG` defines. See that file for details. In
92particular you can define `CONFIG_EXTRA_ENV_SETTINGS` in your board file
93to add environment variables.
94
95Board maintainers are encouraged to migrate to the text-based environment as it
96is easier to maintain. The distro-board script still requires the old-style
97environment but work is underway to address this.
98
99
100List of environment variables
101-----------------------------
102
Simon Glass40b9e0d2021-10-21 21:08:50 -0600103Some device configuration options can be set using environment variables. In
104many cases the value in the default environment comes from a CONFIG option - see
Simon Glass5ba9e012021-10-21 21:08:49 -0600105`include/env_default.h`) for this.
106
Simon Glass86b9c3e2021-10-21 21:08:46 -0600107This is most-likely not complete:
Simon Glassea754aa2021-10-21 21:08:45 -0600108
109baudrate
Simon Glass40b9e0d2021-10-21 21:08:50 -0600110 Used to set the baudrate of the UART - it defaults to CONFIG_BAUDRATE (which
111 defaults to 115200).
Simon Glassea754aa2021-10-21 21:08:45 -0600112
113bootdelay
Simon Glass40b9e0d2021-10-21 21:08:50 -0600114 Delay before automatically running bootcmd. During this time the user
115 can choose to enter the shell (or the boot menu if
116 CONFIG_AUTOBOOT_MENU_SHOW=y):
117
118 - 0 to autoboot with no delay, but you can stop it by key input.
119 - -1 to disable autoboot.
120 - -2 to autoboot with no delay and not check for abort
121
122 The default value is defined by CONFIG_BOOTDELAY.
123 The value of 'bootdelay' is overridden by the /config/bootdelay value in
124 the device-tree if CONFIG_OF_CONTROL=y.
Simon Glassea754aa2021-10-21 21:08:45 -0600125
126bootcmd
Simon Glass40b9e0d2021-10-21 21:08:50 -0600127 The command that is run if the user does not enter the shell during the
128 boot delay.
Simon Glassea754aa2021-10-21 21:08:45 -0600129
130bootargs
Simon Glass40b9e0d2021-10-21 21:08:50 -0600131 Command line arguments passed when booting an operating system or binary
132 image
Simon Glassea754aa2021-10-21 21:08:45 -0600133
134bootfile
135 Name of the image to load with TFTP
136
137bootm_low
138 Memory range available for image processing in the bootm
139 command can be restricted. This variable is given as
140 a hexadecimal number and defines lowest address allowed
141 for use by the bootm command. See also "bootm_size"
142 environment variable. Address defined by "bootm_low" is
143 also the base of the initial memory mapping for the Linux
144 kernel -- see the description of CONFIG_SYS_BOOTMAPSZ and
145 bootm_mapsize.
146
147bootm_mapsize
148 Size of the initial memory mapping for the Linux kernel.
149 This variable is given as a hexadecimal number and it
150 defines the size of the memory region starting at base
151 address bootm_low that is accessible by the Linux kernel
152 during early boot. If unset, CONFIG_SYS_BOOTMAPSZ is used
153 as the default value if it is defined, and bootm_size is
154 used otherwise.
155
156bootm_size
157 Memory range available for image processing in the bootm
158 command can be restricted. This variable is given as
159 a hexadecimal number and defines the size of the region
160 allowed for use by the bootm command. See also "bootm_low"
161 environment variable.
162
163bootstopkeysha256, bootdelaykey, bootstopkey
164 See README.autoboot
165
166updatefile
167 Location of the software update file on a TFTP server, used
168 by the automatic software update feature. Please refer to
169 documentation in doc/README.update for more details.
170
171autoload
172 if set to "no" (any string beginning with 'n'),
Simon Glass40b9e0d2021-10-21 21:08:50 -0600173 "bootp" and "dhcp" will just load perform a lookup of the
Simon Glassea754aa2021-10-21 21:08:45 -0600174 configuration from the BOOTP server, but not try to
Simon Glass754a7222022-03-11 16:22:39 -0700175 load any image.
Simon Glassea754aa2021-10-21 21:08:45 -0600176
177autostart
Simon Glass40b9e0d2021-10-21 21:08:50 -0600178 if set to "yes", an image loaded using the "bootp", "dhcp",
Simon Glassea754aa2021-10-21 21:08:45 -0600179 "rarpboot", "tftpboot" or "diskboot" commands will
180 be automatically started (by internally calling
181 "bootm")
182
Simon Glass78398652021-10-21 21:08:52 -0600183 If unset, or set to "1"/"yes"/"true" (case insensitive, just the first
184 character is enough), a standalone image
185 passed to the "bootm" command will be copied to the load address
Simon Glassea754aa2021-10-21 21:08:45 -0600186 (and eventually uncompressed), but NOT be started.
187 This can be used to load and uncompress arbitrary
188 data.
189
190fdt_high
191 if set this restricts the maximum address that the
192 flattened device tree will be copied into upon boot.
193 For example, if you have a system with 1 GB memory
194 at physical address 0x10000000, while Linux kernel
195 only recognizes the first 704 MB as low memory, you
196 may need to set fdt_high as 0x3C000000 to have the
197 device tree blob be copied to the maximum address
198 of the 704 MB low memory, so that Linux kernel can
199 access it during the boot procedure.
200
Simon Glass40b9e0d2021-10-21 21:08:50 -0600201 If this is set to the special value 0xffffffff (32-bit machines) or
202 0xffffffffffffffff (64-bit machines) then
Simon Glassea754aa2021-10-21 21:08:45 -0600203 the fdt will not be copied at all on boot. For this
204 to work it must reside in writable memory, have
205 sufficient padding on the end of it for u-boot to
206 add the information it needs into it, and the memory
207 must be accessible by the kernel.
208
209fdtcontroladdr
210 if set this is the address of the control flattened
211 device tree used by U-Boot when CONFIG_OF_CONTROL is
212 defined.
213
214initrd_high
215 restrict positioning of initrd images:
216 If this variable is not set, initrd images will be
217 copied to the highest possible address in RAM; this
218 is usually what you want since it allows for
219 maximum initrd size. If for some reason you want to
220 make sure that the initrd image is loaded below the
221 CONFIG_SYS_BOOTMAPSZ limit, you can set this environment
222 variable to a value of "no" or "off" or "0".
223 Alternatively, you can set it to a maximum upper
224 address to use (U-Boot will still check that it
225 does not overwrite the U-Boot stack and data).
226
227 For instance, when you have a system with 16 MB
228 RAM, and want to reserve 4 MB from use by Linux,
229 you can do this by adding "mem=12M" to the value of
230 the "bootargs" variable. However, now you must make
231 sure that the initrd image is placed in the first
232 12 MB as well - this can be done with::
233
234 setenv initrd_high 00c00000
235
Simon Glass40b9e0d2021-10-21 21:08:50 -0600236 If you set initrd_high to 0xffffffff (32-bit machines) or
237 0xffffffffffffffff (64-bit machines), this is an
Simon Glassea754aa2021-10-21 21:08:45 -0600238 indication to U-Boot that all addresses are legal
239 for the Linux kernel, including addresses in flash
240 memory. In this case U-Boot will NOT COPY the
241 ramdisk at all. This may be useful to reduce the
242 boot time on your system, but requires that this
243 feature is supported by your Linux kernel.
244
245ipaddr
246 IP address; needed for tftpboot command
247
248loadaddr
249 Default load address for commands like "bootp",
250 "rarpboot", "tftpboot", "loadb" or "diskboot"
251
252loads_echo
253 see CONFIG_LOADS_ECHO
254
255serverip
256 TFTP server IP address; needed for tftpboot command
257
258bootretry
259 see CONFIG_BOOT_RETRY_TIME
260
261bootdelaykey
262 see CONFIG_AUTOBOOT_DELAY_STR
263
264bootstopkey
265 see CONFIG_AUTOBOOT_STOP_STR
266
267ethprime
Simon Glass40b9e0d2021-10-21 21:08:50 -0600268 controls which network interface is used first.
Simon Glassea754aa2021-10-21 21:08:45 -0600269
270ethact
271 controls which interface is currently active.
272 For example you can do the following::
273
274 => setenv ethact FEC
275 => ping 192.168.0.1 # traffic sent on FEC
276 => setenv ethact SCC
277 => ping 10.0.0.1 # traffic sent on SCC
278
279ethrotate
280 When set to "no" U-Boot does not go through all
281 available network interfaces.
Simon Glass40b9e0d2021-10-21 21:08:50 -0600282 It just stays at the currently selected interface. When unset or set to
283 anything other than "no", U-Boot does go through all
284 available network interfaces.
Simon Glassea754aa2021-10-21 21:08:45 -0600285
286netretry
287 When set to "no" each network operation will
288 either succeed or fail without retrying.
289 When set to "once" the network operation will
290 fail when all the available network interfaces
291 are tried once without success.
292 Useful on scripts which control the retry operation
293 themselves.
294
Simon Glassea754aa2021-10-21 21:08:45 -0600295silent_linux
296 If set then Linux will be told to boot silently, by
Simon Glass40b9e0d2021-10-21 21:08:50 -0600297 adding 'console=' to its command line. If "yes" it will be
Simon Glassea754aa2021-10-21 21:08:45 -0600298 made silent. If "no" it will not be made silent. If
299 unset, then it will be made silent if the U-Boot console
300 is silent.
301
302tftpsrcp
303 If this is set, the value is used for TFTP's
304 UDP source port.
305
306tftpdstp
307 If this is set, the value is used for TFTP's UDP
Simon Glass40b9e0d2021-10-21 21:08:50 -0600308 destination port instead of the default port 69.
Simon Glassea754aa2021-10-21 21:08:45 -0600309
310tftpblocksize
311 Block size to use for TFTP transfers; if not set,
312 we use the TFTP server's default block size
313
314tftptimeout
315 Retransmission timeout for TFTP packets (in milli-
316 seconds, minimum value is 1000 = 1 second). Defines
317 when a packet is considered to be lost so it has to
318 be retransmitted. The default is 5000 = 5 seconds.
319 Lowering this value may make downloads succeed
320 faster in networks with high packet loss rates or
321 with unreliable TFTP servers.
322
323tftptimeoutcountmax
324 maximum count of TFTP timeouts (no
325 unit, minimum value = 0). Defines how many timeouts
326 can happen during a single file transfer before that
327 transfer is aborted. The default is 10, and 0 means
328 'no timeouts allowed'. Increasing this value may help
329 downloads succeed with high packet loss rates, or with
330 unreliable TFTP servers or client hardware.
331
332tftpwindowsize
333 if this is set, the value is used for TFTP's
334 window size as described by RFC 7440.
335 This means the count of blocks we can receive before
336 sending ack to server.
337
338vlan
339 When set to a value < 4095 the traffic over
340 Ethernet is encapsulated/received over 802.1q
341 VLAN tagged frames.
342
Simon Glass5ba9e012021-10-21 21:08:49 -0600343 Note: This appears not to be used in U-Boot. See `README.VLAN`.
344
Simon Glassea754aa2021-10-21 21:08:45 -0600345bootpretryperiod
346 Period during which BOOTP/DHCP sends retries.
347 Unsigned value, in milliseconds. If not set, the period will
348 be either the default (28000), or a value based on
349 CONFIG_NET_RETRY_COUNT, if defined. This value has
Chris Packhamf1533c42022-05-25 13:08:51 +1200350 precedence over the value based on CONFIG_NET_RETRY_COUNT.
Simon Glassea754aa2021-10-21 21:08:45 -0600351
352memmatches
353 Number of matches found by the last 'ms' command, in hex
354
355memaddr
356 Address of the last match found by the 'ms' command, in hex,
357 or 0 if none
358
359mempos
360 Index position of the last match found by the 'ms' command,
361 in units of the size (.b, .w, .l) of the search
362
363zbootbase
364 (x86 only) Base address of the bzImage 'setup' block
365
366zbootaddr
367 (x86 only) Address of the loaded bzImage, typically
368 BZIMAGE_LOAD_ADDR which is 0x100000
369
370
371Image locations
372---------------
373
374The following image location variables contain the location of images
375used in booting. The "Image" column gives the role of the image and is
376not an environment variable name. The other columns are environment
377variable names. "File Name" gives the name of the file on a TFTP
378server, "RAM Address" gives the location in RAM the image will be
379loaded to, and "Flash Location" gives the image's address in NOR
380flash or offset in NAND flash.
381
382*Note* - these variables don't have to be defined for all boards, some
383boards currently use other variables for these purposes, and some
384boards use these variables for other purposes.
385
Simon Glass5ba9e012021-10-21 21:08:49 -0600386Also note that most of these variables are just a commonly used set of variable
387names, used in some other variable definitions, but are not hard-coded anywhere
388in U-Boot code.
389
Simon Glassea754aa2021-10-21 21:08:45 -0600390================= ============== ================ ==============
391Image File Name RAM Address Flash Location
392================= ============== ================ ==============
393u-boot u-boot u-boot_addr_r u-boot_addr
394Linux kernel bootfile kernel_addr_r kernel_addr
395device tree blob fdtfile fdt_addr_r fdt_addr
396ramdisk ramdiskfile ramdisk_addr_r ramdisk_addr
397================= ============== ================ ==============
398
399
400Automatically updated variables
401-------------------------------
402
403The following environment variables may be used and automatically
404updated by the network boot commands ("bootp" and "rarpboot"),
405depending the information provided by your boot server:
406
407========= ===================================================
408Variable Notes
409========= ===================================================
410bootfile see above
411dnsip IP address of your Domain Name Server
412dnsip2 IP address of your secondary Domain Name Server
413gatewayip IP address of the Gateway (Router) to use
414hostname Target hostname
415ipaddr See above
416netmask Subnet Mask
417rootpath Pathname of the root filesystem on the NFS server
418serverip see above
419========= ===================================================
420
421
422Special environment variables
423-----------------------------
424
425There are two special Environment Variables:
426
427serial#
428 contains hardware identification information such as type string and/or
429 serial number
430ethaddr
Simon Glass40b9e0d2021-10-21 21:08:50 -0600431 Ethernet address. If CONFIG_REGEX=y, also eth*addr (where * is an integer).
Simon Glassea754aa2021-10-21 21:08:45 -0600432
433These variables can be set only once (usually during manufacturing of
434the board). U-Boot refuses to delete or overwrite these variables
Simon Glass40b9e0d2021-10-21 21:08:50 -0600435once they have been set, unless CONFIG_ENV_OVERWRITE is enabled in the board
436configuration.
Simon Glassea754aa2021-10-21 21:08:45 -0600437
438Also:
439
440ver
441 Contains the U-Boot version string as printed
442 with the "version" command. This variable is
443 readonly (see CONFIG_VERSION_VARIABLE).
444
445Please note that changes to some configuration parameters may take
Simon Glass40b9e0d2021-10-21 21:08:50 -0600446only effect after the next boot (yes, that's just like Windows).
Simon Glass1df02d12021-10-21 21:08:48 -0600447
448
449External environment file
450-------------------------
451
452The `CONFIG_USE_DEFAULT_ENV_FILE` option provides a way to bypass the
453environment generation in U-Boot. If enabled, then `CONFIG_DEFAULT_ENV_FILE`
454provides the name of a file which is converted into the environment,
455completely bypassing the standard environment variables in `env_default.h`.
456
457The format is the same as accepted by the mkenvimage tool, with lines containing
458key=value pairs. Blank lines and lines beginning with # are ignored.
459
460Future work may unify this feature with the text-based environment, perhaps
461moving the contents of `env_default.h` to a text file.
Simon Glass40b9e0d2021-10-21 21:08:50 -0600462
463Implementation
464--------------
465
466See :doc:`../develop/environment` for internal development details.