Simon Glass | 5769531 | 2021-10-14 12:48:10 -0600 | [diff] [blame] | 1 | .. SPDX-License-Identifier: GPL-2.0+ |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 2 | |
| 3 | Generic Distro Configuration Concept |
| 4 | ==================================== |
| 5 | |
| 6 | Linux distributions are faced with supporting a variety of boot mechanisms, |
| 7 | environments or bootloaders (PC BIOS, EFI, U-Boot, Barebox, ...). This makes |
| 8 | life complicated. Worse, bootloaders such as U-Boot have a configurable set |
| 9 | of features, and each board chooses to enable a different set of features. |
| 10 | Hence, distros typically need to have board-specific knowledge in order to |
| 11 | set up a bootable system. |
| 12 | |
| 13 | This document defines a common set of U-Boot features that are required for |
| 14 | a distro to support the board in a generic fashion. Any board wishing to |
| 15 | allow distros to install and boot in an out-of-the-box fashion should enable |
| 16 | all these features. Linux distros can then create a single set of boot |
| 17 | support/install logic that targets these features. This will allow distros |
| 18 | to install on many boards without the need for board-specific logic. |
| 19 | |
| 20 | In fact, some of these features can be implemented by any bootloader, thus |
| 21 | decoupling distro install/boot logic from any knowledge of the bootloader. |
| 22 | |
| 23 | This model assumes that boards will load boot configuration files from a |
| 24 | regular storage mechanism (eMMC, SD card, USB Disk, SATA disk, etc.) with |
Masahiro Yamada | 7790de7 | 2015-07-07 18:47:17 +0900 | [diff] [blame] | 25 | a standard partitioning scheme (MBR, GPT). Boards that cannot support this |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 26 | storage model are outside the scope of this document, and may still need |
| 27 | board-specific installer/boot-configuration support in a distro. |
| 28 | |
| 29 | To some extent, this model assumes that a board has a separate boot flash |
| 30 | that contains U-Boot, and that the user has somehow installed U-Boot to this |
| 31 | flash before running the distro installer. Even on boards that do not conform |
| 32 | to this aspect of the model, the extent of the board-specific support in the |
| 33 | distro installer logic would be to install a board-specific U-Boot package to |
Masahiro Yamada | 7790de7 | 2015-07-07 18:47:17 +0900 | [diff] [blame] | 34 | the boot partition during installation. This distro-supplied U-Boot can still |
| 35 | implement the same features as on any other board, and hence the distro's boot |
| 36 | configuration file generation logic can still be board-agnostic. |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 37 | |
| 38 | Locating Bootable Disks |
| 39 | ----------------------- |
| 40 | |
| 41 | Typical desktop/server PCs search all (or a user-defined subset of) attached |
| 42 | storage devices for a bootable partition, then load the bootloader or boot |
| 43 | configuration files from there. A U-Boot board port that enables the features |
| 44 | mentioned in this document will search for boot configuration files in the |
| 45 | same way. |
| 46 | |
| 47 | Thus, distros do not need to manipulate any kind of bootloader-specific |
| 48 | configuration data to indicate which storage device the system should boot |
| 49 | from. |
| 50 | |
| 51 | Distros simply need to install the boot configuration files (see next |
| 52 | section) in an ext2/3/4 or FAT partition, mark the partition bootable (via |
| 53 | the MBR bootable flag, or GPT legacy_bios_bootable attribute), and U-Boot (or |
| 54 | any other bootloader) will find those boot files and execute them. This is |
| 55 | conceptually identical to creating a grub2 configuration file on a desktop |
| 56 | PC. |
| 57 | |
Masahiro Yamada | 7790de7 | 2015-07-07 18:47:17 +0900 | [diff] [blame] | 58 | Note that in the absence of any partition that is explicitly marked bootable, |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 59 | U-Boot falls back to searching the first valid partition of a disk for boot |
| 60 | configuration files. Other bootloaders are recommended to do the same, since |
| 61 | I believe that partition table bootable flags aren't so commonly used outside |
| 62 | the realm of x86 PCs. |
| 63 | |
| 64 | U-Boot can also search for boot configuration files from a TFTP server. |
| 65 | |
| 66 | Boot Configuration Files |
| 67 | ------------------------ |
| 68 | |
| 69 | The standard format for boot configuration files is that of extlinux.conf, as |
| 70 | handled by U-Boot's "syslinux" (disk) or "pxe boot" (network). This is roughly |
Simon Glass | 5769531 | 2021-10-14 12:48:10 -0600 | [diff] [blame] | 71 | as specified at BootLoaderSpec_: |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 72 | |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 73 | |
| 74 | ... with the exceptions that the BootLoaderSpec document: |
| 75 | |
| 76 | * Prescribes a separate configuration per boot menu option, whereas U-Boot |
| 77 | lumps all options into a single extlinux.conf file. Hence, U-Boot searches |
| 78 | for /extlinux/extlinux.conf then /boot/extlinux/extlinux.conf on disk, or |
| 79 | pxelinux.cfg/default over the network. |
| 80 | |
| 81 | * Does not document the fdtdir option, which automatically selects the DTB to |
| 82 | pass to the kernel. |
| 83 | |
Simon Glass | 5769531 | 2021-10-14 12:48:10 -0600 | [diff] [blame] | 84 | One example extlinux.conf generated by the Fedora installer is:: |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 85 | |
Simon Glass | 5769531 | 2021-10-14 12:48:10 -0600 | [diff] [blame] | 86 | # extlinux.conf generated by anaconda |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 87 | |
Simon Glass | 5769531 | 2021-10-14 12:48:10 -0600 | [diff] [blame] | 88 | ui menu.c32 |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 89 | |
Simon Glass | 5769531 | 2021-10-14 12:48:10 -0600 | [diff] [blame] | 90 | menu autoboot Welcome to Fedora. Automatic boot in # second{,s}. Press a key for options. |
| 91 | menu title Fedora Boot Options. |
| 92 | menu hidden |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 93 | |
Simon Glass | 5769531 | 2021-10-14 12:48:10 -0600 | [diff] [blame] | 94 | timeout 50 |
| 95 | #totaltimeout 9000 |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 96 | |
Simon Glass | 5769531 | 2021-10-14 12:48:10 -0600 | [diff] [blame] | 97 | default Fedora (3.17.0-0.rc4.git2.1.fc22.armv7hl+lpae) 22 (Rawhide) |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 98 | |
Simon Glass | 5769531 | 2021-10-14 12:48:10 -0600 | [diff] [blame] | 99 | label Fedora (3.17.0-0.rc4.git2.1.fc22.armv7hl) 22 (Rawhide) |
| 100 | kernel /boot/vmlinuz-3.17.0-0.rc4.git2.1.fc22.armv7hl |
| 101 | append ro root=UUID=8eac677f-8ea8-4270-8479-d5ddbb797450 console=ttyS0,115200n8 LANG=en_US.UTF-8 drm.debug=0xf |
| 102 | fdtdir /boot/dtb-3.17.0-0.rc4.git2.1.fc22.armv7hl |
| 103 | initrd /boot/initramfs-3.17.0-0.rc4.git2.1.fc22.armv7hl.img |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 104 | |
Simon Glass | 5769531 | 2021-10-14 12:48:10 -0600 | [diff] [blame] | 105 | label Fedora (3.17.0-0.rc4.git2.1.fc22.armv7hl+lpae) 22 (Rawhide) |
| 106 | kernel /boot/vmlinuz-3.17.0-0.rc4.git2.1.fc22.armv7hl+lpae |
| 107 | append ro root=UUID=8eac677f-8ea8-4270-8479-d5ddbb797450 console=ttyS0,115200n8 LANG=en_US.UTF-8 drm.debug=0xf |
| 108 | fdtdir /boot/dtb-3.17.0-0.rc4.git2.1.fc22.armv7hl+lpae |
| 109 | initrd /boot/initramfs-3.17.0-0.rc4.git2.1.fc22.armv7hl+lpae.img |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 110 | |
Simon Glass | 5769531 | 2021-10-14 12:48:10 -0600 | [diff] [blame] | 111 | label Fedora-0-rescue-8f6ba7b039524e0eb957d2c9203f04bc (0-rescue-8f6ba7b039524e0eb957d2c9203f04bc) |
| 112 | kernel /boot/vmlinuz-0-rescue-8f6ba7b039524e0eb957d2c9203f04bc |
| 113 | initrd /boot/initramfs-0-rescue-8f6ba7b039524e0eb957d2c9203f04bc.img |
| 114 | append ro root=UUID=8eac677f-8ea8-4270-8479-d5ddbb797450 console=ttyS0,115200n8 |
| 115 | fdtdir /boot/dtb-3.16.0-0.rc6.git1.1.fc22.armv7hl+lpae |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 116 | |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 117 | |
Simon Glass | 5769531 | 2021-10-14 12:48:10 -0600 | [diff] [blame] | 118 | Another hand-crafted network boot configuration file is:: |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 119 | |
Simon Glass | 5769531 | 2021-10-14 12:48:10 -0600 | [diff] [blame] | 120 | TIMEOUT 100 |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 121 | |
Simon Glass | 5769531 | 2021-10-14 12:48:10 -0600 | [diff] [blame] | 122 | MENU TITLE TFTP boot options |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 123 | |
Simon Glass | 5769531 | 2021-10-14 12:48:10 -0600 | [diff] [blame] | 124 | LABEL jetson-tk1-emmc |
| 125 | MENU LABEL ../zImage root on Jetson TK1 eMMC |
| 126 | LINUX ../zImage |
| 127 | FDTDIR ../ |
| 128 | APPEND console=ttyS0,115200n8 console=tty1 loglevel=8 rootwait rw earlyprintk root=PARTUUID=80a5a8e9-c744-491a-93c1-4f4194fd690b |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 129 | |
Simon Glass | 5769531 | 2021-10-14 12:48:10 -0600 | [diff] [blame] | 130 | LABEL venice2-emmc |
| 131 | MENU LABEL ../zImage root on Venice2 eMMC |
| 132 | LINUX ../zImage |
| 133 | FDTDIR ../ |
| 134 | APPEND console=ttyS0,115200n8 console=tty1 loglevel=8 rootwait rw earlyprintk root=PARTUUID=5f71e06f-be08-48ed-b1ef-ee4800cc860f |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 135 | |
Simon Glass | 5769531 | 2021-10-14 12:48:10 -0600 | [diff] [blame] | 136 | LABEL sdcard |
| 137 | MENU LABEL ../zImage, root on 2GB sdcard |
| 138 | LINUX ../zImage |
| 139 | FDTDIR ../ |
| 140 | APPEND console=ttyS0,115200n8 console=tty1 loglevel=8 rootwait rw earlyprintk root=PARTUUID=b2f82cda-2535-4779-b467-094a210fbae7 |
| 141 | |
| 142 | LABEL fedora-installer-fk |
| 143 | MENU LABEL Fedora installer w/ Fedora kernel |
| 144 | LINUX fedora-installer/vmlinuz |
| 145 | INITRD fedora-installer/initrd.img.orig |
| 146 | FDTDIR fedora-installer/dtb |
| 147 | APPEND loglevel=8 ip=dhcp inst.repo=http://10.0.0.2/mirrors/fedora/linux/development/rawhide/armhfp/os/ rd.shell cma=64M |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 148 | |
| 149 | U-Boot Implementation |
| 150 | ===================== |
| 151 | |
| 152 | Enabling the distro options |
| 153 | --------------------------- |
| 154 | |
Hans de Goede | f99c5cb | 2016-06-20 23:16:28 +0200 | [diff] [blame] | 155 | In your board's defconfig, enable the DISTRO_DEFAULTS option by adding |
| 156 | a line with "CONFIG_DISTRO_DEFAULTS=y". If you want to enable this |
| 157 | from Kconfig itself, for e.g. all boards using a specific SoC then |
Masahiro Yamada | 9afc6c5 | 2018-04-25 18:47:52 +0900 | [diff] [blame] | 158 | add a "imply DISTRO_DEFAULTS" to your SoC CONFIG option. |
Hans de Goede | f99c5cb | 2016-06-20 23:16:28 +0200 | [diff] [blame] | 159 | |
Simon Glass | 83b9be6 | 2022-04-24 23:31:26 -0600 | [diff] [blame] | 160 | |
| 161 | TO BE UPDATED: |
| 162 | |
Simon Glass | 5769531 | 2021-10-14 12:48:10 -0600 | [diff] [blame] | 163 | In your board configuration file, include the following:: |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 164 | |
Simon Glass | 5769531 | 2021-10-14 12:48:10 -0600 | [diff] [blame] | 165 | #ifndef CONFIG_SPL_BUILD |
| 166 | #include <config_distro_bootcmd.h> |
| 167 | #endif |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 168 | |
| 169 | The first of those headers primarily enables a core set of U-Boot features, |
| 170 | such as support for MBR and GPT partitions, ext* and FAT filesystems, booting |
| 171 | raw zImage and initrd (rather than FIT- or uImage-wrapped files), etc. Network |
| 172 | boot support is also enabled here, which is useful in order to boot distro |
| 173 | installers given that distros do not commonly distribute bootable install |
| 174 | media for non-PC targets at present. |
| 175 | |
| 176 | Finally, a few options that are mostly relevant only when using U-Boot- |
| 177 | specific boot.scr scripts are enabled. This enables distros to generate a |
| 178 | U-Boot-specific boot.scr script rather than extlinux.conf as the boot |
| 179 | configuration file. While doing so is fully supported, and |
Adam Ford | c8d3462 | 2018-02-06 07:49:32 -0600 | [diff] [blame] | 180 | CONFIG_DISTRO_DEFAULTS exposes enough parameterization to boot.scr to |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 181 | allow for board-agnostic boot.scr content, this document recommends that |
| 182 | distros generate extlinux.conf rather than boot.scr. extlinux.conf is intended |
| 183 | to work across multiple bootloaders, whereas boot.scr will only work with |
| 184 | U-Boot. TODO: document the contract between U-Boot and boot.scr re: which |
| 185 | environment variables a generic boot.scr may rely upon. |
| 186 | |
| 187 | The second of those headers sets up the default environment so that $bootcmd |
| 188 | is defined in a way that searches attached disks for boot configuration files, |
| 189 | and executes them if found. |
| 190 | |
| 191 | Required Environment Variables |
| 192 | ------------------------------ |
| 193 | |
| 194 | The U-Boot "syslinux" and "pxe boot" commands require a number of environment |
| 195 | variables be set. Default values for these variables are often hard-coded into |
| 196 | CONFIG_EXTRA_ENV_SETTINGS in the board's U-Boot configuration file, so that |
| 197 | the user doesn't have to configure them. |
| 198 | |
| 199 | fdt_addr: |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 200 | Mandatory for any system that provides the DTB in HW (e.g. ROM) and wishes |
| 201 | to pass that DTB to Linux, rather than loading a DTB from the boot |
| 202 | filesystem. Prohibited for any other system. |
| 203 | |
| 204 | If specified a DTB to boot the system must be available at the given |
| 205 | address. |
| 206 | |
| 207 | fdt_addr_r: |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 208 | Mandatory. The location in RAM where the DTB will be loaded or copied to when |
| 209 | processing the fdtdir/devicetreedir or fdt/devicetree options in |
| 210 | extlinux.conf. |
| 211 | |
| 212 | This is mandatory even when fdt_addr is provided, since extlinux.conf must |
| 213 | always be able to provide a DTB which overrides any copy provided by the HW. |
| 214 | |
| 215 | A size of 1MB for the FDT/DTB seems reasonable. |
| 216 | |
Dennis Gilmore | 66cb0d0 | 2020-09-11 11:56:59 -0500 | [diff] [blame] | 217 | fdtfile: |
Dennis Gilmore | 66cb0d0 | 2020-09-11 11:56:59 -0500 | [diff] [blame] | 218 | Mandatory. the name of the DTB file for the specific board for instance |
| 219 | the espressobin v5 board the value is "marvell/armada-3720-espressobin.dtb" |
| 220 | while on a clearfog pro it is "armada-388-clearfog-pro.dtb" in the case of |
| 221 | a board providing its firmware based DTB this value can be used to override |
| 222 | the DTB with a different DTB. fdtfile will automatically be set for you if |
| 223 | it matches the format ${soc}-${board}.dtb which covers most 32 bit use cases. |
| 224 | AArch64 generally does not match as the Linux kernel put the dtb files under |
Wolfgang Denk | 9d328a6 | 2021-09-27 17:42:38 +0200 | [diff] [blame] | 225 | SoC vendor directories. |
Dennis Gilmore | 66cb0d0 | 2020-09-11 11:56:59 -0500 | [diff] [blame] | 226 | |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 227 | ramdisk_addr_r: |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 228 | Mandatory. The location in RAM where the initial ramdisk will be loaded to |
| 229 | when processing the initrd option in extlinux.conf. |
| 230 | |
Simon Glass | 5769531 | 2021-10-14 12:48:10 -0600 | [diff] [blame] | 231 | It is recommended that this location be highest in RAM out of fdt_addr_r, |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 232 | kernel_addr_r, and ramdisk_addr_r, so that the RAM disk can vary in size |
| 233 | and use any available RAM. |
| 234 | |
| 235 | kernel_addr_r: |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 236 | Mandatory. The location in RAM where the kernel will be loaded to when |
| 237 | processing the kernel option in the extlinux.conf. |
| 238 | |
| 239 | The kernel should be located within the first 128M of RAM in order for the |
| 240 | kernel CONFIG_AUTO_ZRELADDR option to work, which is likely enabled on any |
| 241 | distro kernel. Since the kernel will decompress itself to 0x8000 after the |
Masahiro Yamada | 7790de7 | 2015-07-07 18:47:17 +0900 | [diff] [blame] | 242 | start of RAM, kernel_addr_r should not overlap that area, or the kernel will |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 243 | have to copy itself somewhere else first before decompression. |
| 244 | |
| 245 | A size of 16MB for the kernel is likely adequate. |
| 246 | |
Atish Patra | 99c469c | 2020-03-05 16:24:23 -0800 | [diff] [blame] | 247 | kernel_comp_addr_r: |
| 248 | Optional. This is only required if user wants to boot Linux from a compressed |
Heinrich Schuchardt | f3fb75d | 2021-02-17 08:06:05 +0100 | [diff] [blame] | 249 | Image(.gz, .bz2, .lzma, .lzo) using the booti command. It represents the |
| 250 | location in RAM where the compressed Image will be decompressed temporarily. |
| 251 | Once the decompression is complete, the decompressed data will be moved to |
| 252 | kernel_addr_r for booting. |
Atish Patra | 99c469c | 2020-03-05 16:24:23 -0800 | [diff] [blame] | 253 | |
| 254 | kernel_comp_size: |
| 255 | Optional. This is only required if user wants to boot Linux from a compressed |
| 256 | Image using booti command. It represents the size of the compressed file. The |
| 257 | size has to at least the size of loaded image for decompression to succeed. |
| 258 | |
Vagrant Cascadian | f4d4d1b | 2016-02-08 19:55:31 -0800 | [diff] [blame] | 259 | pxefile_addr_r: |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 260 | Mandatory. The location in RAM where extlinux.conf will be loaded to prior |
| 261 | to processing. |
| 262 | |
| 263 | A size of 1MB for extlinux.conf is more than adequate. |
| 264 | |
| 265 | scriptaddr: |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 266 | Mandatory, if the boot script is boot.scr rather than extlinux.conf. The |
| 267 | location in RAM where boot.scr will be loaded to prior to execution. |
| 268 | |
| 269 | A size of 1MB for extlinux.conf is more than adequate. |
| 270 | |
| 271 | For suggestions on memory locations for ARM systems, you must follow the |
| 272 | guidelines specified in Documentation/arm/Booting in the Linux kernel tree. |
| 273 | |
| 274 | For a commented example of setting these values, please see the definition of |
| 275 | MEM_LAYOUT_ENV_SETTINGS in include/configs/tegra124-common.h. |
| 276 | |
| 277 | Boot Target Configuration |
| 278 | ------------------------- |
| 279 | |
Simon Glass | 5769531 | 2021-10-14 12:48:10 -0600 | [diff] [blame] | 280 | The `config_distro_bootcmd.h` file defines $bootcmd and many helper command |
| 281 | variables that automatically search attached disks for boot configuration files |
| 282 | and execute them. Boards must provide configure <config_distro_bootcmd.h> so |
| 283 | that it supports the correct set of possible boot device types. To provide this |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 284 | configuration, simply define macro BOOT_TARGET_DEVICES prior to including |
Simon Glass | 5769531 | 2021-10-14 12:48:10 -0600 | [diff] [blame] | 285 | <config_distro_bootcmd.h>. For example:: |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 286 | |
Simon Glass | 5769531 | 2021-10-14 12:48:10 -0600 | [diff] [blame] | 287 | #ifndef CONFIG_SPL_BUILD |
| 288 | #define BOOT_TARGET_DEVICES(func) \ |
| 289 | func(MMC, mmc, 1) \ |
| 290 | func(MMC, mmc, 0) \ |
| 291 | func(USB, usb, 0) \ |
| 292 | func(PXE, pxe, na) \ |
| 293 | func(DHCP, dhcp, na) |
| 294 | #include <config_distro_bootcmd.h> |
| 295 | #endif |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 296 | |
| 297 | Each entry in the macro defines a single boot device (e.g. a specific eMMC |
| 298 | device or SD card) or type of boot device (e.g. USB disk). The parameters to |
| 299 | the func macro (passed in by the internal implementation of the header) are: |
| 300 | |
Pali Rohár | 7ab2200 | 2022-04-06 11:35:46 +0200 | [diff] [blame] | 301 | - Upper-case disk type (DHCP, HOST, IDE, MMC, NVME, PXE, SATA, SCSI, UBIFS, USB, |
| 302 | VIRTIO). |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 303 | - Lower-case disk type (same options as above). |
| 304 | - ID of the specific disk (MMC only) or ignored for other types. |
| 305 | |
| 306 | User Configuration |
| 307 | ================== |
| 308 | |
| 309 | Once the user has installed U-Boot, it is expected that the environment will |
| 310 | be reset to the default values in order to enable $bootcmd and friends, as set |
| 311 | up by <config_distro_bootcmd.h>. After this, various environment variables may |
| 312 | be altered to influence the boot process: |
| 313 | |
| 314 | boot_targets: |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 315 | The list of boot locations searched. |
| 316 | |
| 317 | Example: mmc0, mmc1, usb, pxe |
| 318 | |
| 319 | Entries may be removed or re-ordered in this list to affect the boot order. |
| 320 | |
| 321 | boot_prefixes: |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 322 | For disk-based booting, the list of directories within a partition that are |
| 323 | searched for boot configuration files (extlinux.conf, boot.scr). |
| 324 | |
| 325 | Example: / /boot/ |
| 326 | |
| 327 | Entries may be removed or re-ordered in this list to affect the set of |
| 328 | directories which are searched. |
| 329 | |
| 330 | boot_scripts: |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 331 | The name of U-Boot style boot.scr files that $bootcmd searches for. |
| 332 | |
| 333 | Example: boot.scr.uimg boot.scr |
| 334 | |
| 335 | (Typically we expect extlinux.conf to be used, but execution of boot.scr is |
| 336 | maintained for backwards-compatibility.) |
| 337 | |
| 338 | Entries may be removed or re-ordered in this list to affect the set of |
| 339 | filenames which are supported. |
| 340 | |
| 341 | scan_dev_for_extlinux: |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 342 | If you want to disable extlinux.conf on all disks, set the value to something |
| 343 | innocuous, e.g. setenv scan_dev_for_extlinux true. |
| 344 | |
| 345 | scan_dev_for_scripts: |
Dennis Gilmore | b977607 | 2015-01-22 11:34:20 -0700 | [diff] [blame] | 346 | If you want to disable boot.scr on all disks, set the value to something |
| 347 | innocuous, e.g. setenv scan_dev_for_scripts true. |
Karsten Merker | 3b2401b | 2015-03-21 14:15:38 +0100 | [diff] [blame] | 348 | |
Stephen Warren | 4c739fb | 2016-01-26 11:10:12 -0700 | [diff] [blame] | 349 | boot_net_usb_start: |
Stephen Warren | 4c739fb | 2016-01-26 11:10:12 -0700 | [diff] [blame] | 350 | If you want to prevent USB enumeration by distro boot commands which execute |
| 351 | network operations, set the value to something innocuous, e.g. setenv |
| 352 | boot_net_usb_start true. This would be useful if you know your Ethernet |
| 353 | device is not attached to USB, and you wish to increase boot speed by |
| 354 | avoiding unnecessary actions. |
Karsten Merker | 3b2401b | 2015-03-21 14:15:38 +0100 | [diff] [blame] | 355 | |
Stephen Warren | 3a74c64 | 2016-01-26 11:10:13 -0700 | [diff] [blame] | 356 | boot_net_pci_enum: |
Stephen Warren | 3a74c64 | 2016-01-26 11:10:13 -0700 | [diff] [blame] | 357 | If you want to prevent PCI enumeration by distro boot commands which execute |
| 358 | network operations, set the value to something innocuous, e.g. setenv |
| 359 | boot_net_pci_enum true. This would be useful if you know your Ethernet |
| 360 | device is not attached to PCI, and you wish to increase boot speed by |
| 361 | avoiding unnecessary actions. |
| 362 | |
Karsten Merker | 3b2401b | 2015-03-21 14:15:38 +0100 | [diff] [blame] | 363 | Interactively booting from a specific device at the u-boot prompt |
| 364 | ================================================================= |
| 365 | |
| 366 | For interactively booting from a user-selected device at the u-boot command |
| 367 | prompt, the environment provides predefined bootcmd_<target> variables for |
| 368 | every target defined in boot_targets, which can be run be the user. |
| 369 | |
| 370 | If the target is a storage device, the format of the target is always |
| 371 | <device type><device number>, e.g. mmc0. Specifying the device number is |
| 372 | mandatory for storage devices, even if only support for a single instance |
| 373 | of the storage device is actually implemented. |
| 374 | |
| 375 | For network targets (dhcp, pxe), only the device type gets specified; |
| 376 | they do not have a device number. |
| 377 | |
| 378 | Examples: |
| 379 | |
| 380 | - run bootcmd_usb0 |
| 381 | boots from the first USB mass storage device |
| 382 | |
| 383 | - run bootcmd_mmc1 |
| 384 | boots from the second MMC device |
| 385 | |
| 386 | - run bootcmd_pxe |
| 387 | boots by tftp using a pxelinux.cfg |
| 388 | |
| 389 | The list of possible targets consists of: |
| 390 | |
| 391 | - network targets |
Simon Glass | 5769531 | 2021-10-14 12:48:10 -0600 | [diff] [blame] | 392 | |
Karsten Merker | 3b2401b | 2015-03-21 14:15:38 +0100 | [diff] [blame] | 393 | * dhcp |
| 394 | * pxe |
| 395 | |
| 396 | - storage targets (to which a device number must be appended) |
Simon Glass | 5769531 | 2021-10-14 12:48:10 -0600 | [diff] [blame] | 397 | |
Karsten Merker | 3b2401b | 2015-03-21 14:15:38 +0100 | [diff] [blame] | 398 | * mmc |
| 399 | * sata |
| 400 | * scsi |
| 401 | * ide |
| 402 | * usb |
Lukas Auer | e8c4df4 | 2018-11-22 11:26:33 +0100 | [diff] [blame] | 403 | * virtio |
Karsten Merker | 3b2401b | 2015-03-21 14:15:38 +0100 | [diff] [blame] | 404 | |
| 405 | Other *boot* variables than the ones defined above are only for internal use |
| 406 | of the boot environment and are not guaranteed to exist or work in the same |
| 407 | way in future u-boot versions. In particular the <device type>_boot |
| 408 | variables (e.g. mmc_boot, usb_boot) are a strictly internal implementation |
| 409 | detail and must not be used as a public interface. |
Simon Glass | 5769531 | 2021-10-14 12:48:10 -0600 | [diff] [blame] | 410 | |
| 411 | .. _BootLoaderSpec: http://www.freedesktop.org/wiki/Specifications/BootLoaderSpec/ |
| 412 | |
| 413 | .. sectionauthor:: (C) Copyright 2014 Red Hat Inc. |
| 414 | .. sectionauthor:: Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved. |
| 415 | .. sectionauthor:: Copyright (C) 2015 K. Merker <merker@debian.org> |