Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 1 | .. SPDX-License-Identifier: GPL-2.0+ |
| 2 | |
| 3 | Environment Variables |
| 4 | ===================== |
| 5 | |
Simon Glass | 420febd | 2021-10-21 21:08:50 -0600 | [diff] [blame] | 6 | U-Boot supports user configuration using environment variables which |
Simon Glass | 341c7ea | 2021-10-21 21:08:49 -0600 | [diff] [blame] | 7 | can be made persistent by saving to persistent storage, for example flash |
| 8 | memory. |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 9 | |
Simon Glass | 420febd | 2021-10-21 21:08:50 -0600 | [diff] [blame] | 10 | Environment variables are set using "env set" (alias "setenv"), printed using |
Simon Glass | 341c7ea | 2021-10-21 21:08:49 -0600 | [diff] [blame] | 11 | "env print" (alias "printenv"), and saved to persistent storage using |
| 12 | "env save" (alias "saveenv"). Using "env set" |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 13 | without a value can be used to delete a variable from the |
Simon Glass | 341c7ea | 2021-10-21 21:08:49 -0600 | [diff] [blame] | 14 | environment. As long as you don't save the environment, you are |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 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 | |
Patrick Delaunay | aa5f43a | 2022-04-14 19:07:05 +0200 | [diff] [blame] | 18 | See :doc:`cmd/env` for details. |
| 19 | |
Simon Glass | 341c7ea | 2021-10-21 21:08:49 -0600 | [diff] [blame] | 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). |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 23 | |
Simon Glass | 7327fe7 | 2021-10-21 21:08:46 -0600 | [diff] [blame] | 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 |
Simon Glass | 52cb504 | 2022-10-18 07:46:31 -0600 | [diff] [blame] | 66 | #ifdef CONFIG_VIDEO |
Simon Glass | 395bcf2 | 2022-10-16 15:59:22 -0600 | [diff] [blame] | 67 | stdout+=,vidconsole |
Simon Glass | 7327fe7 | 2021-10-21 21:08:46 -0600 | [diff] [blame] | 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 | |
Simon Glass | 6fe2097 | 2023-07-30 21:01:46 -0600 | [diff] [blame] | 84 | Settings which are common to a group of boards can use #include to bring in |
| 85 | a common file in the `include/env` directory, containing environment |
| 86 | settings. For example:: |
| 87 | |
| 88 | #include <env/ti/mmc.env> |
| 89 | |
Simon Glass | 7327fe7 | 2021-10-21 21:08:46 -0600 | [diff] [blame] | 90 | If CONFIG_ENV_SOURCE_FILE is empty and the default filename is not present, then |
| 91 | the old-style C environment is used instead. See below. |
| 92 | |
| 93 | Old-style C environment |
| 94 | ----------------------- |
| 95 | |
| 96 | Traditionally, the default environment is created in `include/env_default.h`, |
| 97 | and can be augmented by various `CONFIG` defines. See that file for details. In |
Tom Rini | c9edebe | 2022-12-04 10:03:50 -0500 | [diff] [blame] | 98 | particular you can define `CFG_EXTRA_ENV_SETTINGS` in your board file |
Simon Glass | 7327fe7 | 2021-10-21 21:08:46 -0600 | [diff] [blame] | 99 | to add environment variables. |
| 100 | |
| 101 | Board maintainers are encouraged to migrate to the text-based environment as it |
| 102 | is easier to maintain. The distro-board script still requires the old-style |
Simon Glass | 16047dc | 2024-07-17 09:30:52 +0100 | [diff] [blame] | 103 | environments, so use :doc:`/develop/bootstd/index` instead. |
Simon Glass | 7327fe7 | 2021-10-21 21:08:46 -0600 | [diff] [blame] | 104 | |
| 105 | |
| 106 | List of environment variables |
| 107 | ----------------------------- |
| 108 | |
Simon Glass | 420febd | 2021-10-21 21:08:50 -0600 | [diff] [blame] | 109 | Some device configuration options can be set using environment variables. In |
| 110 | many cases the value in the default environment comes from a CONFIG option - see |
Simon Glass | 341c7ea | 2021-10-21 21:08:49 -0600 | [diff] [blame] | 111 | `include/env_default.h`) for this. |
| 112 | |
Simon Glass | 7327fe7 | 2021-10-21 21:08:46 -0600 | [diff] [blame] | 113 | This is most-likely not complete: |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 114 | |
Heinrich Schuchardt | aa5ffb3 | 2022-09-10 09:16:37 +0200 | [diff] [blame] | 115 | autostart |
| 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 | |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 136 | baudrate |
Simon Glass | 420febd | 2021-10-21 21:08:50 -0600 | [diff] [blame] | 137 | Used to set the baudrate of the UART - it defaults to CONFIG_BAUDRATE (which |
| 138 | defaults to 115200). |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 139 | |
| 140 | bootdelay |
Simon Glass | 420febd | 2021-10-21 21:08:50 -0600 | [diff] [blame] | 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. |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 152 | |
| 153 | bootcmd |
Simon Glass | 420febd | 2021-10-21 21:08:50 -0600 | [diff] [blame] | 154 | The command that is run if the user does not enter the shell during the |
| 155 | boot delay. |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 156 | |
| 157 | bootargs |
Simon Glass | 420febd | 2021-10-21 21:08:50 -0600 | [diff] [blame] | 158 | Command line arguments passed when booting an operating system or binary |
| 159 | image |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 160 | |
| 161 | bootfile |
| 162 | Name of the image to load with TFTP |
| 163 | |
| 164 | bootm_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 |
Tom Rini | 6a5dccc | 2022-11-16 13:10:41 -0500 | [diff] [blame] | 171 | kernel -- see the description of CFG_SYS_BOOTMAPSZ and |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 172 | bootm_mapsize. |
| 173 | |
| 174 | bootm_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 |
Tom Rini | 6a5dccc | 2022-11-16 13:10:41 -0500 | [diff] [blame] | 179 | during early boot. If unset, CFG_SYS_BOOTMAPSZ is used |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 180 | as the default value if it is defined, and bootm_size is |
| 181 | used otherwise. |
| 182 | |
| 183 | bootm_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 | |
| 190 | bootstopkeysha256, bootdelaykey, bootstopkey |
| 191 | See README.autoboot |
| 192 | |
Caleb Connolly | 2259c29 | 2024-01-09 11:51:09 +0000 | [diff] [blame] | 193 | button_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 | |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 197 | updatefile |
| 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 | |
| 202 | autoload |
| 203 | if set to "no" (any string beginning with 'n'), |
Simon Glass | 420febd | 2021-10-21 21:08:50 -0600 | [diff] [blame] | 204 | "bootp" and "dhcp" will just load perform a lookup of the |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 205 | configuration from the BOOTP server, but not try to |
Simon Glass | d68e165 | 2022-03-11 16:22:39 -0700 | [diff] [blame] | 206 | load any image. |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 207 | |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 208 | fdt_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 | |
Simon Glass | 420febd | 2021-10-21 21:08:50 -0600 | [diff] [blame] | 219 | If this is set to the special value 0xffffffff (32-bit machines) or |
| 220 | 0xffffffffffffffff (64-bit machines) then |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 221 | the fdt will not be copied at all on boot. For this |
| 222 | to work it must reside in writable memory, have |
Michal Simek | 4d0837b | 2023-09-08 09:11:31 +0200 | [diff] [blame] | 223 | sufficient padding on the end of it for U-Boot to |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 224 | add the information it needs into it, and the memory |
Tom Rini | 3c860b5 | 2022-06-20 10:31:28 -0400 | [diff] [blame] | 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. |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 228 | |
| 229 | fdtcontroladdr |
| 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 | |
| 234 | initrd_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 |
Tom Rini | 6a5dccc | 2022-11-16 13:10:41 -0500 | [diff] [blame] | 241 | CFG_SYS_BOOTMAPSZ limit, you can set this environment |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 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 | |
Simon Glass | 420febd | 2021-10-21 21:08:50 -0600 | [diff] [blame] | 256 | If you set initrd_high to 0xffffffff (32-bit machines) or |
| 257 | 0xffffffffffffffff (64-bit machines), this is an |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 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 |
Tom Rini | 3c860b5 | 2022-06-20 10:31:28 -0400 | [diff] [blame] | 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. |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 267 | |
| 268 | ipaddr |
| 269 | IP address; needed for tftpboot command |
| 270 | |
| 271 | loadaddr |
| 272 | Default load address for commands like "bootp", |
Tom Rini | 3c860b5 | 2022-06-20 10:31:28 -0400 | [diff] [blame] | 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. |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 278 | |
| 279 | loads_echo |
| 280 | see CONFIG_LOADS_ECHO |
| 281 | |
| 282 | serverip |
| 283 | TFTP server IP address; needed for tftpboot command |
| 284 | |
| 285 | bootretry |
| 286 | see CONFIG_BOOT_RETRY_TIME |
| 287 | |
| 288 | bootdelaykey |
| 289 | see CONFIG_AUTOBOOT_DELAY_STR |
| 290 | |
| 291 | bootstopkey |
| 292 | see CONFIG_AUTOBOOT_STOP_STR |
| 293 | |
| 294 | ethprime |
Simon Glass | 420febd | 2021-10-21 21:08:50 -0600 | [diff] [blame] | 295 | controls which network interface is used first. |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 296 | |
| 297 | ethact |
| 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 | |
| 306 | ethrotate |
| 307 | When set to "no" U-Boot does not go through all |
| 308 | available network interfaces. |
Simon Glass | 420febd | 2021-10-21 21:08:50 -0600 | [diff] [blame] | 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. |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 312 | |
Marek Vasut | 22a9508 | 2023-12-13 22:11:13 +0100 | [diff] [blame] | 313 | httpdstp |
| 314 | If this is set, the value is used for HTTP's TCP |
| 315 | destination port instead of the default port 80. |
| 316 | |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 317 | netretry |
| 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 | |
Alex Shumsky | daef5ee | 2024-10-16 13:02:03 +0300 | [diff] [blame] | 326 | rng_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 | |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 331 | silent_linux |
| 332 | If set then Linux will be told to boot silently, by |
Simon Glass | 420febd | 2021-10-21 21:08:50 -0600 | [diff] [blame] | 333 | adding 'console=' to its command line. If "yes" it will be |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 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 | |
| 338 | tftpsrcp |
| 339 | If this is set, the value is used for TFTP's |
| 340 | UDP source port. |
| 341 | |
| 342 | tftpdstp |
| 343 | If this is set, the value is used for TFTP's UDP |
Simon Glass | 420febd | 2021-10-21 21:08:50 -0600 | [diff] [blame] | 344 | destination port instead of the default port 69. |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 345 | |
| 346 | tftpblocksize |
| 347 | Block size to use for TFTP transfers; if not set, |
| 348 | we use the TFTP server's default block size |
| 349 | |
| 350 | tftptimeout |
| 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 | |
| 359 | tftptimeoutcountmax |
| 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 | |
| 368 | tftpwindowsize |
| 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 | |
Janne Grunau | 176e8f0 | 2024-04-04 08:25:52 +0200 | [diff] [blame] | 374 | usb_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 | |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 387 | vlan |
| 388 | When set to a value < 4095 the traffic over |
| 389 | Ethernet is encapsulated/received over 802.1q |
| 390 | VLAN tagged frames. |
| 391 | |
Simon Glass | 341c7ea | 2021-10-21 21:08:49 -0600 | [diff] [blame] | 392 | Note: This appears not to be used in U-Boot. See `README.VLAN`. |
| 393 | |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 394 | bootpretryperiod |
| 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 |
Chris Packham | 291f731 | 2022-05-25 13:08:51 +1200 | [diff] [blame] | 399 | precedence over the value based on CONFIG_NET_RETRY_COUNT. |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 400 | |
| 401 | memmatches |
| 402 | Number of matches found by the last 'ms' command, in hex |
| 403 | |
| 404 | memaddr |
| 405 | Address of the last match found by the 'ms' command, in hex, |
| 406 | or 0 if none |
| 407 | |
| 408 | mempos |
| 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 | |
| 412 | zbootbase |
| 413 | (x86 only) Base address of the bzImage 'setup' block |
| 414 | |
| 415 | zbootaddr |
| 416 | (x86 only) Address of the loaded bzImage, typically |
| 417 | BZIMAGE_LOAD_ADDR which is 0x100000 |
| 418 | |
| 419 | |
| 420 | Image locations |
| 421 | --------------- |
| 422 | |
| 423 | The following image location variables contain the location of images |
| 424 | used in booting. The "Image" column gives the role of the image and is |
| 425 | not an environment variable name. The other columns are environment |
| 426 | variable names. "File Name" gives the name of the file on a TFTP |
| 427 | server, "RAM Address" gives the location in RAM the image will be |
| 428 | loaded to, and "Flash Location" gives the image's address in NOR |
| 429 | flash or offset in NAND flash. |
| 430 | |
| 431 | *Note* - these variables don't have to be defined for all boards, some |
| 432 | boards currently use other variables for these purposes, and some |
| 433 | boards use these variables for other purposes. |
| 434 | |
Simon Glass | 341c7ea | 2021-10-21 21:08:49 -0600 | [diff] [blame] | 435 | Also note that most of these variables are just a commonly used set of variable |
| 436 | names, used in some other variable definitions, but are not hard-coded anywhere |
| 437 | in U-Boot code. |
| 438 | |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 439 | ================= ============== ================ ============== |
| 440 | Image File Name RAM Address Flash Location |
| 441 | ================= ============== ================ ============== |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 442 | Linux kernel bootfile kernel_addr_r kernel_addr |
| 443 | device tree blob fdtfile fdt_addr_r fdt_addr |
| 444 | ramdisk ramdiskfile ramdisk_addr_r ramdisk_addr |
| 445 | ================= ============== ================ ============== |
| 446 | |
Tom Rini | 4e2630e | 2022-07-11 14:32:13 -0400 | [diff] [blame] | 447 | When 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 |
| 449 | one type of constraint is payload requirement. For example, a device tree MUST |
| 450 | be loaded at an 8-byte aligned address as that is what the specification |
| 451 | requires. In a similar manner, the operating system may define restrictions on |
| 452 | where in memory space payloads can be. This is documented for example in Linux, |
| 453 | with both the `Booting ARM Linux`_ and `Booting AArch64 Linux`_ documents. |
| 454 | Finally, there are practical constraints. We do not know the size of a given |
| 455 | payload a user will use but each payload must not overlap or it will corrupt |
| 456 | the other payload. A similar problem can happen when a payload ends up being in |
| 457 | the OS BSS area. For these reasons we need to ensure our default values here |
| 458 | are both unlikely to lead to failure to boot and sufficiently explained so that |
| 459 | they can be optimized for boot time or adjusted for smaller memory |
| 460 | configurations. |
| 461 | |
| 462 | On different architectures we will have different constraints. It is important |
| 463 | that we follow whatever documented requirements are available to best ensure |
| 464 | forward compatibility. What follows are examples to highlight how to provide |
| 465 | reasonable default values in different cases. |
| 466 | |
| 467 | Texas Instruments OMAP2PLUS (ARMv7) example |
| 468 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 469 | |
| 470 | On these families of processors we are on a 32bit ARMv7 core. As booting some |
| 471 | form of Linux is our most common payload we will also keep in mind the |
| 472 | documented requirements for booting that Linux provides. These values are also |
| 473 | known to be fine for booting a number of other operating systems (or their |
| 474 | loaders). 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 | |
| 482 | The first thing to keep in mind is that DRAM starts at 0x80000000. We set a |
| 483 | 32MiB 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 |
| 485 | will typically then be able to avoid doing a relocation itself. It also MUST be |
| 486 | within the first 128MiB of memory. The next value is we set ``fdt_addr_r`` to |
| 487 | be at 128MiB offset from the start of memory. This location is suggested by the |
| 488 | kernel documentation and is exceedingly unlikely to be overwritten by the |
| 489 | kernel itself given other architectural constraints. We then allow for the |
| 490 | device tree to be up to 512KiB in size before placing the ramdisk in memory. We |
| 491 | then say that everything should be within the first 256MiB of memory so that |
| 492 | U-Boot can relocate things as needed to ensure proper alignment. We pick 256MiB |
| 493 | as our value here because we know there are very few platforms on in this |
| 494 | family with less memory. It could be as high as 768MiB and still ensure that |
| 495 | everything would be visible to the kernel, but again we go with what we assume |
| 496 | is the safest assumption. |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 497 | |
| 498 | Automatically updated variables |
| 499 | ------------------------------- |
| 500 | |
| 501 | The following environment variables may be used and automatically |
| 502 | updated by the network boot commands ("bootp" and "rarpboot"), |
| 503 | depending the information provided by your boot server: |
| 504 | |
| 505 | ========= =================================================== |
| 506 | Variable Notes |
| 507 | ========= =================================================== |
| 508 | bootfile see above |
| 509 | dnsip IP address of your Domain Name Server |
| 510 | dnsip2 IP address of your secondary Domain Name Server |
| 511 | gatewayip IP address of the Gateway (Router) to use |
| 512 | hostname Target hostname |
| 513 | ipaddr See above |
| 514 | netmask Subnet Mask |
| 515 | rootpath Pathname of the root filesystem on the NFS server |
| 516 | serverip see above |
| 517 | ========= =================================================== |
| 518 | |
| 519 | |
| 520 | Special environment variables |
| 521 | ----------------------------- |
| 522 | |
| 523 | There are two special Environment Variables: |
| 524 | |
| 525 | serial# |
| 526 | contains hardware identification information such as type string and/or |
| 527 | serial number |
| 528 | ethaddr |
Simon Glass | 420febd | 2021-10-21 21:08:50 -0600 | [diff] [blame] | 529 | Ethernet address. If CONFIG_REGEX=y, also eth*addr (where * is an integer). |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 530 | |
| 531 | These variables can be set only once (usually during manufacturing of |
| 532 | the board). U-Boot refuses to delete or overwrite these variables |
Simon Glass | 420febd | 2021-10-21 21:08:50 -0600 | [diff] [blame] | 533 | once they have been set, unless CONFIG_ENV_OVERWRITE is enabled in the board |
| 534 | configuration. |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 535 | |
| 536 | Also: |
| 537 | |
| 538 | ver |
| 539 | Contains the U-Boot version string as printed |
| 540 | with the "version" command. This variable is |
| 541 | readonly (see CONFIG_VERSION_VARIABLE). |
| 542 | |
| 543 | Please note that changes to some configuration parameters may take |
Simon Glass | 420febd | 2021-10-21 21:08:50 -0600 | [diff] [blame] | 544 | only effect after the next boot (yes, that's just like Windows). |
Simon Glass | aef523a | 2021-10-21 21:08:45 -0600 | [diff] [blame] | 545 | |
Simon Glass | 9f3a7bf | 2021-10-21 21:08:48 -0600 | [diff] [blame] | 546 | |
| 547 | External environment file |
| 548 | ------------------------- |
| 549 | |
| 550 | The `CONFIG_USE_DEFAULT_ENV_FILE` option provides a way to bypass the |
| 551 | environment generation in U-Boot. If enabled, then `CONFIG_DEFAULT_ENV_FILE` |
| 552 | provides the name of a file which is converted into the environment, |
| 553 | completely bypassing the standard environment variables in `env_default.h`. |
| 554 | |
| 555 | The format is the same as accepted by the mkenvimage tool, with lines containing |
| 556 | key=value pairs. Blank lines and lines beginning with # are ignored. |
| 557 | |
| 558 | Future work may unify this feature with the text-based environment, perhaps |
| 559 | moving the contents of `env_default.h` to a text file. |
Simon Glass | 420febd | 2021-10-21 21:08:50 -0600 | [diff] [blame] | 560 | |
| 561 | Implementation |
| 562 | -------------- |
| 563 | |
| 564 | See :doc:`../develop/environment` for internal development details. |
Tom Rini | 4e2630e | 2022-07-11 14:32:13 -0400 | [diff] [blame] | 565 | |
| 566 | .. _`Booting ARM Linux`: https://www.kernel.org/doc/html/latest/arm/booting.html |
| 567 | .. _`Booting AArch64 Linux`: https://www.kernel.org/doc/html/latest/arm64/booting.html |