83f210d2d058efe79cdb783d0940be83838cbe8f
[platform/kernel/u-boot.git] / doc / usage / environment.rst
1 .. SPDX-License-Identifier: GPL-2.0+
2
3 Environment Variables
4 =====================
5
6 U-Boot supports user configuration using environment variables which
7 can be made persistent by saving to persistent storage, for example flash
8 memory.
9
10 Environment variables are set using "env set" (alias "setenv"), printed using
11 "env print" (alias "printenv"), and saved to persistent storage using
12 "env save" (alias "saveenv"). Using "env set"
13 without a value can be used to delete a variable from the
14 environment. As long as you don't save the environment, you are
15 working with an in-memory copy. In case the Flash area containing the
16 environment is erased by accident, a default environment is provided.
17
18 See :doc:`cmd/env` for details.
19
20 Some configuration is controlled by Environment Variables, so that setting the
21 variable can adjust the behaviour of U-Boot (e.g. autoboot delay, autoloading
22 from tftp).
23
24 Text-based Environment
25 ----------------------
26
27 The default environment for a board is created using a `.env` environment file
28 using 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
31 The file must be in the board directory and have a .env extension, so
32 assuming that there is a board vendor, the resulting filename is therefore::
33
34    board/<vendor>/<board>/<CONFIG_ENV_SOURCE_FILE>.env
35
36 or::
37
38    board/<vendor>/<board>/<CONFIG_SYS_BOARD>.env
39
40 This is a plain text file where you can type your environment variables in
41 the form `var=value`. Blank lines and multi-line variables are supported.
42 The conversion script looks for a line that starts in column 1 with a string
43 and has an equals sign immediately afterwards. Spaces before the = are not
44 permitted. It is a good idea to indent your scripts so that only the 'var='
45 appears at the start of a line.
46
47 To add additional text to a variable you can use `var+=value`. This text is
48 merged into the variable during the make process and made available as a
49 single value to U-Boot. Variables can contain `+` characters but in the unlikely
50 event that you want to have a variable name ending in plus, put a backslash
51 before the `+` so that the script knows you are not adding to an existing
52 variable but assigning to a new one::
53
54     maximum\+=value
55
56 This file can include C-style comments. Blank lines and multi-line
57 variables are supported, and you can use normal C preprocessor directives
58 and CONFIG defines from your board config also.
59
60 For example, for snapper9260 you would create a text file called
61 `board/bluewater/snapper9260.env` containing the environment text.
62
63 Example::
64
65     stdout=serial
66     #ifdef CONFIG_VIDEO
67     stdout+=,vidconsole
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
84 If CONFIG_ENV_SOURCE_FILE is empty and the default filename is not present, then
85 the old-style C environment is used instead. See below.
86
87 Old-style C environment
88 -----------------------
89
90 Traditionally, the default environment is created in `include/env_default.h`,
91 and can be augmented by various `CONFIG` defines. See that file for details. In
92 particular you can define `CONFIG_EXTRA_ENV_SETTINGS` in your board file
93 to add environment variables.
94
95 Board maintainers are encouraged to migrate to the text-based environment as it
96 is easier to maintain. The distro-board script still requires the old-style
97 environment but work is underway to address this.
98
99
100 List of environment variables
101 -----------------------------
102
103 Some device configuration options can be set using environment variables. In
104 many cases the value in the default environment comes from a CONFIG option - see
105 `include/env_default.h`) for this.
106
107 This is most-likely not complete:
108
109 autostart
110     If set to "yes" (actually any string starting with 1, y, Y, t, or T) an
111     image loaded with one of the commands listed below will be automatically
112     started by internally invoking the bootm command.
113
114     * bootelf - Boot from an ELF image in memory
115     * bootp - boot image via network using BOOTP/TFTP protocol
116     * dhcp - boot image via network using DHCP/TFTP protocol
117     * diskboot - boot from ide device
118     * nboot - boot from NAND device
119     * nfs - boot image via network using NFS protocol
120     * rarpboot - boot image via network using RARP/TFTP protocol
121     * scsiboot - boot from SCSI device
122     * tftpboot - boot image via network using TFTP protocol
123     * usbboot - boot from USB device
124
125     If the environment variable autostart is not set to a value starting with
126     1, y, Y, t, or T, an image passed to the "bootm" command will be copied to
127     the load address (and eventually uncompressed), but NOT be started.
128     This can be used to load and uncompress arbitrary data.
129
130 baudrate
131     Used to set the baudrate of the UART - it defaults to CONFIG_BAUDRATE (which
132     defaults to 115200).
133
134 bootdelay
135     Delay before automatically running bootcmd. During this time the user
136     can choose to enter the shell (or the boot menu if
137     CONFIG_AUTOBOOT_MENU_SHOW=y):
138
139     - 0 to autoboot with no delay, but you can stop it by key input.
140     - -1 to disable autoboot.
141     - -2 to autoboot with no delay and not check for abort
142
143     The default value is defined by CONFIG_BOOTDELAY.
144     The value of 'bootdelay' is overridden by the /config/bootdelay value in
145     the device-tree if CONFIG_OF_CONTROL=y.
146
147 bootcmd
148     The command that is run if the user does not enter the shell during the
149     boot delay.
150
151 bootargs
152     Command line arguments passed when booting an operating system or binary
153     image
154
155 bootfile
156     Name of the image to load with TFTP
157
158 bootm_low
159     Memory range available for image processing in the bootm
160     command can be restricted. This variable is given as
161     a hexadecimal number and defines lowest address allowed
162     for use by the bootm command. See also "bootm_size"
163     environment variable. Address defined by "bootm_low" is
164     also the base of the initial memory mapping for the Linux
165     kernel -- see the description of CFG_SYS_BOOTMAPSZ and
166     bootm_mapsize.
167
168 bootm_mapsize
169     Size of the initial memory mapping for the Linux kernel.
170     This variable is given as a hexadecimal number and it
171     defines the size of the memory region starting at base
172     address bootm_low that is accessible by the Linux kernel
173     during early boot.  If unset, CFG_SYS_BOOTMAPSZ is used
174     as the default value if it is defined, and bootm_size is
175     used otherwise.
176
177 bootm_size
178     Memory range available for image processing in the bootm
179     command can be restricted. This variable is given as
180     a hexadecimal number and defines the size of the region
181     allowed for use by the bootm command. See also "bootm_low"
182     environment variable.
183
184 bootstopkeysha256, bootdelaykey, bootstopkey
185     See README.autoboot
186
187 updatefile
188     Location of the software update file on a TFTP server, used
189     by the automatic software update feature. Please refer to
190     documentation in doc/README.update for more details.
191
192 autoload
193     if set to "no" (any string beginning with 'n'),
194     "bootp" and "dhcp" will just load perform a lookup of the
195     configuration from the BOOTP server, but not try to
196     load any image.
197
198 fdt_high
199     if set this restricts the maximum address that the
200     flattened device tree will be copied into upon boot.
201     For example, if you have a system with 1 GB memory
202     at physical address 0x10000000, while Linux kernel
203     only recognizes the first 704 MB as low memory, you
204     may need to set fdt_high as 0x3C000000 to have the
205     device tree blob be copied to the maximum address
206     of the 704 MB low memory, so that Linux kernel can
207     access it during the boot procedure.
208
209     If this is set to the special value 0xffffffff (32-bit machines) or
210     0xffffffffffffffff (64-bit machines) then
211     the fdt will not be copied at all on boot.  For this
212     to work it must reside in writable memory, have
213     sufficient padding on the end of it for u-boot to
214     add the information it needs into it, and the memory
215     must be accessible by the kernel. This usage is strongly discouraged
216     however as it also stops U-Boot from ensuring the device tree starting
217     address is properly aligned and a misaligned tree will cause OS failures.
218
219 fdtcontroladdr
220     if set this is the address of the control flattened
221     device tree used by U-Boot when CONFIG_OF_CONTROL is
222     defined.
223
224 initrd_high
225     restrict positioning of initrd images:
226     If this variable is not set, initrd images will be
227     copied to the highest possible address in RAM; this
228     is usually what you want since it allows for
229     maximum initrd size. If for some reason you want to
230     make sure that the initrd image is loaded below the
231     CFG_SYS_BOOTMAPSZ limit, you can set this environment
232     variable to a value of "no" or "off" or "0".
233     Alternatively, you can set it to a maximum upper
234     address to use (U-Boot will still check that it
235     does not overwrite the U-Boot stack and data).
236
237     For instance, when you have a system with 16 MB
238     RAM, and want to reserve 4 MB from use by Linux,
239     you can do this by adding "mem=12M" to the value of
240     the "bootargs" variable. However, now you must make
241     sure that the initrd image is placed in the first
242     12 MB as well - this can be done with::
243
244         setenv initrd_high 00c00000
245
246     If you set initrd_high to 0xffffffff (32-bit machines) or
247     0xffffffffffffffff (64-bit machines), this is an
248     indication to U-Boot that all addresses are legal
249     for the Linux kernel, including addresses in flash
250     memory. In this case U-Boot will NOT COPY the
251     ramdisk at all. This may be useful to reduce the
252     boot time on your system, but requires that this
253     feature is supported by your Linux kernel. This usage however requires
254     that the user ensure that there will be no overlap with other parts of the
255     image such as the Linux kernel BSS. It should not be enabled by default
256     and only done as part of optimizing a deployment.
257
258 ipaddr
259     IP address; needed for tftpboot command
260
261 loadaddr
262     Default load address for commands like "bootp",
263     "rarpboot", "tftpboot", "loadb" or "diskboot".  Note that the optimal
264     default values here will vary between architectures.  On 32bit ARM for
265     example, some offset from start of memory is used as the Linux kernel
266     zImage has a self decompressor and it's best if we stay out of where that
267     will be working.
268
269 loads_echo
270     see CONFIG_LOADS_ECHO
271
272 serverip
273     TFTP server IP address; needed for tftpboot command
274
275 bootretry
276     see CONFIG_BOOT_RETRY_TIME
277
278 bootdelaykey
279     see CONFIG_AUTOBOOT_DELAY_STR
280
281 bootstopkey
282     see CONFIG_AUTOBOOT_STOP_STR
283
284 ethprime
285     controls which network interface is used first.
286
287 ethact
288     controls which interface is currently active.
289     For example you can do the following::
290
291     => setenv ethact FEC
292     => ping 192.168.0.1 # traffic sent on FEC
293     => setenv ethact SCC
294     => ping 10.0.0.1 # traffic sent on SCC
295
296 ethrotate
297     When set to "no" U-Boot does not go through all
298     available network interfaces.
299     It just stays at the currently selected interface. When unset or set to
300     anything other than "no", U-Boot does go through all
301     available network interfaces.
302
303 netretry
304     When set to "no" each network operation will
305     either succeed or fail without retrying.
306     When set to "once" the network operation will
307     fail when all the available network interfaces
308     are tried once without success.
309     Useful on scripts which control the retry operation
310     themselves.
311
312 silent_linux
313     If set then Linux will be told to boot silently, by
314     adding 'console=' to its command line. If "yes" it will be
315     made silent. If "no" it will not be made silent. If
316     unset, then it will be made silent if the U-Boot console
317     is silent.
318
319 tftpsrcp
320     If this is set, the value is used for TFTP's
321     UDP source port.
322
323 tftpdstp
324     If this is set, the value is used for TFTP's UDP
325     destination port instead of the default port 69.
326
327 tftpblocksize
328     Block size to use for TFTP transfers; if not set,
329     we use the TFTP server's default block size
330
331 tftptimeout
332     Retransmission timeout for TFTP packets (in milli-
333     seconds, minimum value is 1000 = 1 second). Defines
334     when a packet is considered to be lost so it has to
335     be retransmitted. The default is 5000 = 5 seconds.
336     Lowering this value may make downloads succeed
337     faster in networks with high packet loss rates or
338     with unreliable TFTP servers.
339
340 tftptimeoutcountmax
341     maximum count of TFTP timeouts (no
342     unit, minimum value = 0). Defines how many timeouts
343     can happen during a single file transfer before that
344     transfer is aborted. The default is 10, and 0 means
345     'no timeouts allowed'. Increasing this value may help
346     downloads succeed with high packet loss rates, or with
347     unreliable TFTP servers or client hardware.
348
349 tftpwindowsize
350     if this is set, the value is used for TFTP's
351     window size as described by RFC 7440.
352     This means the count of blocks we can receive before
353     sending ack to server.
354
355 vlan
356     When set to a value < 4095 the traffic over
357     Ethernet is encapsulated/received over 802.1q
358     VLAN tagged frames.
359
360     Note: This appears not to be used in U-Boot. See `README.VLAN`.
361
362 bootpretryperiod
363     Period during which BOOTP/DHCP sends retries.
364     Unsigned value, in milliseconds. If not set, the period will
365     be either the default (28000), or a value based on
366     CONFIG_NET_RETRY_COUNT, if defined. This value has
367     precedence over the value based on CONFIG_NET_RETRY_COUNT.
368
369 memmatches
370     Number of matches found by the last 'ms' command, in hex
371
372 memaddr
373     Address of the last match found by the 'ms' command, in hex,
374     or 0 if none
375
376 mempos
377     Index position of the last match found by the 'ms' command,
378     in units of the size (.b, .w, .l) of the search
379
380 zbootbase
381     (x86 only) Base address of the bzImage 'setup' block
382
383 zbootaddr
384     (x86 only) Address of the loaded bzImage, typically
385     BZIMAGE_LOAD_ADDR which is 0x100000
386
387
388 Image locations
389 ---------------
390
391 The following image location variables contain the location of images
392 used in booting. The "Image" column gives the role of the image and is
393 not an environment variable name. The other columns are environment
394 variable names. "File Name" gives the name of the file on a TFTP
395 server, "RAM Address" gives the location in RAM the image will be
396 loaded to, and "Flash Location" gives the image's address in NOR
397 flash or offset in NAND flash.
398
399 *Note* - these variables don't have to be defined for all boards, some
400 boards currently use other variables for these purposes, and some
401 boards use these variables for other purposes.
402
403 Also note that most of these variables are just a commonly used set of variable
404 names, used in some other variable definitions, but are not hard-coded anywhere
405 in U-Boot code.
406
407 ================= ============== ================ ==============
408 Image             File Name      RAM Address      Flash Location
409 ================= ============== ================ ==============
410 Linux kernel      bootfile       kernel_addr_r    kernel_addr
411 device tree blob  fdtfile        fdt_addr_r       fdt_addr
412 ramdisk           ramdiskfile    ramdisk_addr_r   ramdisk_addr
413 ================= ============== ================ ==============
414
415 When setting the RAM addresses for `kernel_addr_r`, `fdt_addr_r` and
416 `ramdisk_addr_r` there are several types of constraints to keep in mind. The
417 one type of constraint is payload requirement. For example, a device tree MUST
418 be loaded at an 8-byte aligned address as that is what the specification
419 requires. In a similar manner, the operating system may define restrictions on
420 where in memory space payloads can be. This is documented for example in Linux,
421 with both the `Booting ARM Linux`_ and `Booting AArch64 Linux`_ documents.
422 Finally, there are practical constraints. We do not know the size of a given
423 payload a user will use but each payload must not overlap or it will corrupt
424 the other payload. A similar problem can happen when a payload ends up being in
425 the OS BSS area. For these reasons we need to ensure our default values here
426 are both unlikely to lead to failure to boot and sufficiently explained so that
427 they can be optimized for boot time or adjusted for smaller memory
428 configurations.
429
430 On different architectures we will have different constraints. It is important
431 that we follow whatever documented requirements are available to best ensure
432 forward compatibility. What follows are examples to highlight how to provide
433 reasonable default values in different cases.
434
435 Texas Instruments OMAP2PLUS (ARMv7) example
436 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
437
438 On these families of processors we are on a 32bit ARMv7 core.  As booting some
439 form of Linux is our most common payload we will also keep in mind the
440 documented requirements for booting that Linux provides.  These values are also
441 known to be fine for booting a number of other operating systems (or their
442 loaders).  In this example we define the following variables and values::
443
444     loadaddr=0x82000000
445     kernel_addr_r=${loadaddr}
446     fdt_addr_r=0x88000000
447     ramdisk_addr_r=0x88080000
448     bootm_size=0x10000000
449
450 The first thing to keep in mind is that DRAM starts at 0x80000000. We set a
451 32MiB buffer from the start of memory as our default load address and set
452 ``kernel_addr_r`` to that. This is because the Linux ``zImage`` decompressor
453 will typically then be able to avoid doing a relocation itself. It also MUST be
454 within the first 128MiB of memory. The next value is we set ``fdt_addr_r`` to
455 be at 128MiB offset from the start of memory. This location is suggested by the
456 kernel documentation and is exceedingly unlikely to be overwritten by the
457 kernel itself given other architectural constraints.  We then allow for the
458 device tree to be up to 512KiB in size before placing the ramdisk in memory. We
459 then say that everything should be within the first 256MiB of memory so that
460 U-Boot can relocate things as needed to ensure proper alignment. We pick 256MiB
461 as our value here because we know there are very few platforms on in this
462 family with less memory. It could be as high as 768MiB and still ensure that
463 everything would be visible to the kernel, but again we go with what we assume
464 is the safest assumption.
465
466 Automatically updated variables
467 -------------------------------
468
469 The following environment variables may be used and automatically
470 updated by the network boot commands ("bootp" and "rarpboot"),
471 depending the information provided by your boot server:
472
473 =========  ===================================================
474 Variable   Notes
475 =========  ===================================================
476 bootfile   see above
477 dnsip      IP address of your Domain Name Server
478 dnsip2     IP address of your secondary Domain Name Server
479 gatewayip  IP address of the Gateway (Router) to use
480 hostname   Target hostname
481 ipaddr     See above
482 netmask    Subnet Mask
483 rootpath   Pathname of the root filesystem on the NFS server
484 serverip   see above
485 =========  ===================================================
486
487
488 Special environment variables
489 -----------------------------
490
491 There are two special Environment Variables:
492
493 serial#
494     contains hardware identification information such as type string and/or
495     serial number
496 ethaddr
497     Ethernet address. If CONFIG_REGEX=y, also eth*addr (where * is an integer).
498
499 These variables can be set only once (usually during manufacturing of
500 the board). U-Boot refuses to delete or overwrite these variables
501 once they have been set, unless CONFIG_ENV_OVERWRITE is enabled in the board
502 configuration.
503
504 Also:
505
506 ver
507     Contains the U-Boot version string as printed
508     with the "version" command. This variable is
509     readonly (see CONFIG_VERSION_VARIABLE).
510
511 Please note that changes to some configuration parameters may take
512 only effect after the next boot (yes, that's just like Windows).
513
514
515 External environment file
516 -------------------------
517
518 The `CONFIG_USE_DEFAULT_ENV_FILE` option provides a way to bypass the
519 environment generation in U-Boot. If enabled, then `CONFIG_DEFAULT_ENV_FILE`
520 provides the name of a file which is converted into the environment,
521 completely bypassing the standard environment variables in `env_default.h`.
522
523 The format is the same as accepted by the mkenvimage tool, with lines containing
524 key=value pairs. Blank lines and lines beginning with # are ignored.
525
526 Future work may unify this feature with the text-based environment, perhaps
527 moving the contents of `env_default.h` to a text file.
528
529 Implementation
530 --------------
531
532 See :doc:`../develop/environment` for internal development details.
533
534 .. _`Booting ARM Linux`: https://www.kernel.org/doc/html/latest/arm/booting.html
535 .. _`Booting AArch64 Linux`: https://www.kernel.org/doc/html/latest/arm64/booting.html