| SPDX-License-Identifier: GPL-2.0+ | |
| /* | |
| * (C) Copyright 2001 | |
| * Dave Ellis, SIXNET, dge@sixnetio.com | |
| * | |
| */ | |
| Using autoboot configuration options | |
| ==================================== | |
| The basic autoboot configuration options are documented in the main | |
| U-Boot README. See it for details. They are: | |
| bootdelay | |
| bootcmd | |
| CONFIG_BOOTDELAY | |
| CONFIG_BOOTCOMMAND | |
| Some additional options that make autoboot safer in a production | |
| product are documented here. | |
| Why use them? | |
| ------------- | |
| The basic autoboot feature allows a system to automatically boot to | |
| the real application (such as Linux) without a user having to enter | |
| any commands. If any key is pressed before the boot delay time | |
| expires, U-Boot stops the autoboot process, gives a U-Boot prompt | |
| and waits forever for a command. That's a good thing if you pressed a | |
| key because you wanted to get the prompt. | |
| It's not so good if the key press was a stray character on the | |
| console serial port, say because a user who knows nothing about | |
| U-Boot pressed a key before the system had time to boot. It's even | |
| worse on an embedded product that doesn't have a console during | |
| normal use. The modem plugged into that console port sends a | |
| character at the wrong time and the system hangs, with no clue as to | |
| why it isn't working. | |
| You might want the system to autoboot to recover after an external | |
| configuration program stops autoboot. If the configuration program | |
| dies or loses its connection (modems can disconnect at the worst | |
| time) U-Boot will patiently wait forever for it to finish. | |
| These additional configuration options can help provide a system that | |
| boots when it should, but still allows access to U-Boot. | |
| What they do | |
| ------------ | |
| CONFIG_BOOT_RETRY_TIME | |
| CONFIG_BOOT_RETRY_MIN | |
| "bootretry" environment variable | |
| These options determine what happens after autoboot is | |
| stopped and U-Boot is waiting for commands. | |
| CONFIG_BOOT_RETRY_TIME must be defined to enable the boot | |
| retry feature. If the environment variable "bootretry" is | |
| found then its value is used, otherwise the retry timeout is | |
| CONFIG_BOOT_RETRY_TIME. CONFIG_BOOT_RETRY_MIN is optional and | |
| defaults to CONFIG_BOOT_RETRY_TIME. All times are in seconds. | |
| If the retry timeout is negative, the U-Boot command prompt | |
| never times out. Otherwise it is forced to be at least | |
| CONFIG_BOOT_RETRY_MIN seconds. If no valid U-Boot command is | |
| entered before the specified time the boot delay sequence is | |
| restarted. Each command that U-Boot executes restarts the | |
| timeout. | |
| If CONFIG_BOOT_RETRY_TIME < 0 the feature is there, but | |
| doesn't do anything unless the environment variable | |
| "bootretry" is >= 0. | |
| CONFIG_AUTOBOOT_KEYED | |
| CONFIG_AUTOBOOT_KEYED_CTRLC | |
| CONFIG_AUTOBOOT_PROMPT | |
| CONFIG_AUTOBOOT_DELAY_STR | |
| CONFIG_AUTOBOOT_STOP_STR | |
| "bootdelaykey" environment variable | |
| "bootstopkey" environment variable | |
| These options give more control over stopping autoboot. When | |
| they are used a specific character or string is required to | |
| stop or delay autoboot. | |
| Define CONFIG_AUTOBOOT_KEYED (no value required) to enable | |
| this group of options. CONFIG_AUTOBOOT_DELAY_STR, | |
| CONFIG_AUTOBOOT_STOP_STR or both should be specified (or | |
| specified by the corresponding environment variable), | |
| otherwise there is no way to stop autoboot. | |
| CONFIG_AUTOBOOT_PROMPT is displayed before the boot delay | |
| selected by CONFIG_BOOTDELAY starts. If it is not defined | |
| there is no output indicating that autoboot is in progress. | |
| Note that CONFIG_AUTOBOOT_PROMPT is used as the (only) | |
| argument to a printf() call, so it may contain '%' format | |
| specifications, provided that it also includes, sepearated by | |
| commas exactly like in a printf statement, the required | |
| arguments. It is the responsibility of the user to select only | |
| such arguments that are valid in the given context. A | |
| reasonable prompt could be defined as | |
| #define CONFIG_AUTOBOOT_PROMPT \ | |
| "autoboot in %d seconds\n",bootdelay | |
| If CONFIG_AUTOBOOT_DELAY_STR or "bootdelaykey" is specified | |
| and this string is received from console input before | |
| autoboot starts booting, U-Boot gives a command prompt. The | |
| U-Boot prompt will time out if CONFIG_BOOT_RETRY_TIME is | |
| used, otherwise it never times out. | |
| If CONFIG_AUTOBOOT_STOP_STR or "bootstopkey" is specified and | |
| this string is received from console input before autoboot | |
| starts booting, U-Boot gives a command prompt. The U-Boot | |
| prompt never times out, even if CONFIG_BOOT_RETRY_TIME is | |
| used. | |
| The string recognition is not very sophisticated. If a | |
| partial match is detected, the first non-matching character | |
| is checked to see if starts a new match. There is no check | |
| for a shorter partial match, so it's best if the first | |
| character of a key string does not appear in the rest of the | |
| string. | |
| The CONFIG_AUTOBOOT_KEYED_CTRLC #define allows for the boot | |
| sequence to be interrupted by ctrl-c, in addition to the | |
| "bootdelaykey" and "bootstopkey". Setting this variable | |
| provides an escape sequence from the limited "password" | |
| strings. | |
| CONFIG_AUTOBOOT_ENCRYPTION | |
| "bootstopkeysha256" environment variable | |
| - Hash value of the input which unlocks the device and | |
| stops autoboot. | |
| This option allows a string to be entered into U-Boot to stop the | |
| autoboot. The string itself is hashed and compared against the hash | |
| in the environment variable 'bootstopkeysha256'. If it matches then | |
| boot stops and a command-line prompt is presented. | |
| This provides a way to ship a secure production device which can also | |
| be accessed at the U-Boot command line. | |
| CONFIG_RESET_TO_RETRY | |
| (Only effective when CONFIG_BOOT_RETRY_TIME is also set) | |
| After the countdown timed out, the board will be reset to restart | |
| again. | |
| CONFIG_AUTOBOOT_USE_MENUKEY | |
| CONFIG_AUTOBOOT_MENUKEY | |
| If this key is pressed to stop autoboot, then the commands in the | |
| environment variable 'menucmd' will be executed before boot starts. | |
| For example, 33 means "!" in ASCII, so pressing ! at boot would take | |
| this action. |