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