1SPDX-License-Identifier: GPL-2.0+ 2/* 3 * (C) Copyright 2001 4 * Dave Ellis, SIXNET, dge@sixnetio.com 5 * 6 */ 7 8Using autoboot configuration options 9==================================== 10 11The basic autoboot configuration options are documented in the main 12U-Boot README. See it for details. They are: 13 14 bootdelay 15 bootcmd 16 CONFIG_BOOTDELAY 17 CONFIG_BOOTCOMMAND 18 19Some additional options that make autoboot safer in a production 20product are documented here. 21 22Why use them? 23------------- 24 25The basic autoboot feature allows a system to automatically boot to 26the real application (such as Linux) without a user having to enter 27any commands. If any key is pressed before the boot delay time 28expires, U-Boot stops the autoboot process, gives a U-Boot prompt 29and waits forever for a command. That's a good thing if you pressed a 30key because you wanted to get the prompt. 31 32It's not so good if the key press was a stray character on the 33console serial port, say because a user who knows nothing about 34U-Boot pressed a key before the system had time to boot. It's even 35worse on an embedded product that doesn't have a console during 36normal use. The modem plugged into that console port sends a 37character at the wrong time and the system hangs, with no clue as to 38why it isn't working. 39 40You might want the system to autoboot to recover after an external 41configuration program stops autoboot. If the configuration program 42dies or loses its connection (modems can disconnect at the worst 43time) U-Boot will patiently wait forever for it to finish. 44 45These additional configuration options can help provide a system that 46boots when it should, but still allows access to U-Boot. 47 48What they do 49------------ 50 51 CONFIG_BOOT_RETRY_TIME 52 CONFIG_BOOT_RETRY_MIN 53 54 "bootretry" environment variable 55 56 These options determine what happens after autoboot is 57 stopped and U-Boot is waiting for commands. 58 59 CONFIG_BOOT_RETRY_TIME must be defined to enable the boot 60 retry feature. If the environment variable "bootretry" is 61 found then its value is used, otherwise the retry timeout is 62 CONFIG_BOOT_RETRY_TIME. CONFIG_BOOT_RETRY_MIN is optional and 63 defaults to CONFIG_BOOT_RETRY_TIME. All times are in seconds. 64 65 If the retry timeout is negative, the U-Boot command prompt 66 never times out. Otherwise it is forced to be at least 67 CONFIG_BOOT_RETRY_MIN seconds. If no valid U-Boot command is 68 entered before the specified time the boot delay sequence is 69 restarted. Each command that U-Boot executes restarts the 70 timeout. 71 72 If CONFIG_BOOT_RETRY_TIME < 0 the feature is there, but 73 doesn't do anything unless the environment variable 74 "bootretry" is >= 0. 75 76 CONFIG_AUTOBOOT_KEYED 77 CONFIG_AUTOBOOT_KEYED_CTRLC 78 CONFIG_AUTOBOOT_PROMPT 79 CONFIG_AUTOBOOT_DELAY_STR 80 CONFIG_AUTOBOOT_STOP_STR 81 82 "bootdelaykey" environment variable 83 "bootstopkey" environment variable 84 85 These options give more control over stopping autoboot. When 86 they are used a specific character or string is required to 87 stop or delay autoboot. 88 89 Define CONFIG_AUTOBOOT_KEYED (no value required) to enable 90 this group of options. CONFIG_AUTOBOOT_DELAY_STR, 91 CONFIG_AUTOBOOT_STOP_STR or both should be specified (or 92 specified by the corresponding environment variable), 93 otherwise there is no way to stop autoboot. 94 95 CONFIG_AUTOBOOT_PROMPT is displayed before the boot delay 96 selected by CONFIG_BOOTDELAY starts. If it is not defined 97 there is no output indicating that autoboot is in progress. 98 99 Note that CONFIG_AUTOBOOT_PROMPT is used as the (only) 100 argument to a printf() call, so it may contain '%' format 101 specifications, provided that it also includes, sepearated by 102 commas exactly like in a printf statement, the required 103 arguments. It is the responsibility of the user to select only 104 such arguments that are valid in the given context. A 105 reasonable prompt could be defined as 106 107 #define CONFIG_AUTOBOOT_PROMPT \ 108 "autoboot in %d seconds\n",bootdelay 109 110 If CONFIG_AUTOBOOT_DELAY_STR or "bootdelaykey" is specified 111 and this string is received from console input before 112 autoboot starts booting, U-Boot gives a command prompt. The 113 U-Boot prompt will time out if CONFIG_BOOT_RETRY_TIME is 114 used, otherwise it never times out. 115 116 If CONFIG_AUTOBOOT_STOP_STR or "bootstopkey" is specified and 117 this string is received from console input before autoboot 118 starts booting, U-Boot gives a command prompt. The U-Boot 119 prompt never times out, even if CONFIG_BOOT_RETRY_TIME is 120 used. 121 122 The string recognition is not very sophisticated. If a 123 partial match is detected, the first non-matching character 124 is checked to see if starts a new match. There is no check 125 for a shorter partial match, so it's best if the first 126 character of a key string does not appear in the rest of the 127 string. 128 129 The CONFIG_AUTOBOOT_KEYED_CTRLC #define allows for the boot 130 sequence to be interrupted by ctrl-c, in addition to the 131 "bootdelaykey" and "bootstopkey". Setting this variable 132 provides an escape sequence from the limited "password" 133 strings. 134 135 CONFIG_AUTOBOOT_ENCRYPTION 136 137 "bootstopkeysha256" environment variable 138 139 - Hash value of the input which unlocks the device and 140 stops autoboot. 141 142 This option allows a string to be entered into U-Boot to stop the 143 autoboot. The string itself is hashed and compared against the hash 144 in the environment variable 'bootstopkeysha256'. If it matches then 145 boot stops and a command-line prompt is presented. 146 147 This provides a way to ship a secure production device which can also 148 be accessed at the U-Boot command line. 149 150 CONFIG_RESET_TO_RETRY 151 152 (Only effective when CONFIG_BOOT_RETRY_TIME is also set) 153 After the countdown timed out, the board will be reset to restart 154 again. 155 156 CONFIG_AUTOBOOT_USE_MENUKEY 157 CONFIG_AUTOBOOT_MENUKEY 158 159 If this key is pressed to stop autoboot, then the commands in the 160 environment variable 'menucmd' will be executed before boot starts. 161 For example, 33 means "!" in ASCII, so pressing ! at boot would take 162 this action. 163