diff options
author | Martin Roth <gaumless@gmail.com> | 2017-04-02 16:26:03 -0600 |
---|---|---|
committer | Martin Roth <martinroth@google.com> | 2017-04-11 16:18:57 +0200 |
commit | ccfea16cd41cf2d76cb608e56ba3b81bb60156e4 (patch) | |
tree | f92a06e05c3f848ba90d302160a8708ad9c223c5 | |
parent | 2a7c519c89fc05c3640ee457883829b1d7221f0e (diff) |
Documentation: Reflow Kconfig.md
The original document was written and committed with no regard to line
lengths. This makes it easier to write. Now it needs to be easier to
read, so wrap the lines at 80 characters where possible.
- A couple of headings had to be rewritten to keep them under 80
characters. This required the addition of a new paragraph that had
the old header.
- Remove URL text that was just duplicating the URL.
- All other text is the same, just wrapped.
Change-Id: I44833c28750714fccb87296868c1ff78ab7f1d07
Signed-off-by: Martin Roth <gaumless@gmail.com>
Reviewed-on: https://review.coreboot.org/19076
Tested-by: build bot (Jenkins)
Reviewed-by: Marshall Dawson <marshalldawson3rd@gmail.com>
-rw-r--r-- | Documentation/core/Kconfig.md | 588 |
1 files changed, 445 insertions, 143 deletions
diff --git a/Documentation/core/Kconfig.md b/Documentation/core/Kconfig.md index 11a25389e0..7b436ce80a 100644 --- a/Documentation/core/Kconfig.md +++ b/Documentation/core/Kconfig.md @@ -1,23 +1,39 @@ # Kconfig in coreboot ## Overview -Kconfig is a tool used in coreboot, Linux, and many other projects as the main configuration mechanism. In coreboot, it allows a developer both to select which platform to build and to modify various features within the platform. The Kconfig language was developed as a way to configure the Linux kernel, and is still maintained as a part of the Linux kernel tree. Starting in Linux 2.5.45, the ncurses based menuconfig was added, which is still used as the main configuration front end in coreboot today. +Kconfig is a tool used in coreboot, Linux, and many other projects as the main +configuration mechanism. In coreboot, it allows a developer both to select +which platform to build and to modify various features within the platform. The +Kconfig language was developed as a way to configure the Linux kernel, and is +still maintained as a part of the Linux kernel tree. Starting in Linux 2.5.45, +the ncurses based menuconfig was added, which is still used as the main +configuration front end in coreboot today. The official Kconfig source and documentation is kept at kernel.org: - [Kconfig source](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/scripts/kconfig) - [Kconfig Language Documentation](https://www.kernel.org/doc/Documentation/kbuild/kconfig-language.txt) -The advantage to using Kconfig is that it allows users to easily select the high level features of the project to be enabled or disabled at build time. Ultimately the Kconfig tool generates a list of values which are used by the source code and Makefiles of the project. This allows the source files to select features, and allows the build to determine which files should be compiled and linked to the rom. +The advantage to using Kconfig is that it allows users to easily select the +high level features of the project to be enabled or disabled at build time. +Ultimately the Kconfig tool generates a list of values which are used by the +source code and Makefiles of the project. This allows the source files to +select features, and allows the build to determine which files should be +compiled and linked to the rom. ## Kconfig targets in Make -The Kconfig program in coreboot is built from source in util/kconfig. There are various targets in the makefile to build Kconfig in different ways. These give the user control over how to build the platform +The Kconfig program in coreboot is built from source in util/kconfig. There are +various targets in the makefile to build Kconfig in different ways. These give +the user control over how to build the platform ### Front end configuration targets -These are the make targets that would be used to update the configuration of the platform. -- config - Text mode configuration tool, asks each configuration option in turn. This does actually run in coreboot, but it is recommended that this not be used as there is no way to save a partial config. +These are the make targets that would be used to update the configuration of +the platform. +- config - Text mode configuration tool, asks each configuration option in turn. + This does actually run in coreboot, but it is recommended that this not be + used as there is no way to save a partial config. - gconfig - Graphical configuration tool based on GTK+ 2.0. - menuconfig - Text mode, menu driven configuration tool. - nconfig - Text mode, menu driven configuration tool. @@ -25,55 +41,81 @@ These are the make targets that would be used to update the configuration of the ### Targets that update config files -These options are used to update the coreboot config files, typically .config. The target file can be changed with variables in the environment or on the make command line. - -- defconfig - This generates a config based on another config file. Use the environment variable KBUILD_DEFCONFIG to specify the base config file. -- oldconfig - Displays the answers to all configuration questions as it generates the config.h file. If an interactive question is found that does not have an answer yet, it stops and queries the user for the desired value. -- olddefconfig - Generates a config, using the default value for any symbols not listed in the .config file. -- savedefconfig - Creates a ‘mini-config’ file, stripping out all of the symbols that were left as default values. This is very useful for debugging, and is how config files should be saved. -- silentoldconfig - This evaluates the .config file the same way that the oldconfig target does, but does not print out each question as it is evaluated. It still stops to query the user if an option with no answer in the .config file is found. +These options are used to update the coreboot config files, typically .config. +The target file can be changed with variables in the environment or on the make +command line. + +- defconfig - This generates a config based on another config file. Use the + environment variable KBUILD_DEFCONFIG to specify the base config file. +- oldconfig - Displays the answers to all configuration questions as it + generates the config.h file. If an interactive question is found that does + not have an answer yet, it stops and queries the user for the desired value. +- olddefconfig - Generates a config, using the default value for any symbols not + listed in the .config file. +- savedefconfig - Creates a ‘mini-config’ file, stripping out all of the symbols + that were left as default values. This is very useful for debugging, and is + how config files should be saved. +- silentoldconfig - This evaluates the .config file the same way that the + oldconfig target does, but does not print out each question as it is + evaluated. It still stops to query the user if an option with no answer in + the .config file is found. ### Targets not typically used in coreboot -- localmodconfig, localnoconfig, randconfig, allyesconfig, allnoconfig - These are all used to generate various Kconfig files for testing. +- localmodconfig, localnoconfig, randconfig, allyesconfig, allnoconfig - These + are all used to generate various Kconfig files for testing. ### Environment Variables that affect Kconfig These variables are typically set in the makefiles or on the make command line. #### Variables added to the coreboot Kconfig source -These variables were added to Kconfig specifically for coreboot and are not included in the Linux version. +These variables were added to Kconfig specifically for coreboot and are not +included in the Linux version. -- COREBOOT_BUILD_DIR=path for temporary files. This is used by coreboot’s abuild tool. +- COREBOOT_BUILD_DIR=path for temporary files. This is used by coreboot’s + abuild tool. -- KCONFIG_STRICT=value. Define to enable warnings as errors. This is enabled in coreboot, and should not be changed. +- KCONFIG_STRICT=value. Define to enable warnings as errors. This is enabled + in coreboot, and should not be changed. -- KCONFIG_NEGATIVES=value. Define to show negative values in the autoconf.h file (build/config.h). This is enabled in coreboot, and should not be changed. +- KCONFIG_NEGATIVES=value. Define to show negative values in the autoconf.h file + (build/config.h). This is enabled in coreboot, and should not be changed. #### Variables used to control the input and output config files -- KBUILD_DEFCONFIG=inputname of the defconfig file. This defaults to ‘configs/defconfig’ and is used by the ‘defconfig’ target. +- KBUILD_DEFCONFIG=inputname of the defconfig file. This defaults to + ‘configs/defconfig’ and is used by the ‘defconfig’ target. -- DEFCONFIG=output name of the defconfig file. This defaults to ‘defconfig’ and is used by ‘savedefconfig’ target as the output filename. +- DEFCONFIG=output name of the defconfig file. This defaults to ‘defconfig’ + and is used by ‘savedefconfig’ target as the output filename. -- DOTCONFIG=name of the .config file. This defaults to '.config' and is used by most config type targets. +- DOTCONFIG=name of the .config file. This defaults to '.config' and is used + by most config type targets. #### Variables used by the makefiles for controlling Kconfig -- Kconfig=root Kconfig file. This is set to 'src/Kconfig' in the coreboot makefile. +- Kconfig=root Kconfig file. This is set to 'src/Kconfig' in the coreboot + makefile. - KCONFIG_CONFIG=input config file. coreboot sets this to $(DOTCONFIG). -- KCONFIG_AUTOHEADER=path and filename of autoconf.h file. coreboot sets this to $(obj)/config.h. +- KCONFIG_AUTOHEADER=path and filename of autoconf.h file. coreboot sets this + to $(obj)/config.h. -- KCONFIG_DEPENDENCIES=”kbuild dependency file". This defaults to auto.conf.cmd and outputs the name of all of the Kconfig files used. +- KCONFIG_DEPENDENCIES=”kbuild dependency file". This defaults to + auto.conf.cmd and outputs the name of all of the Kconfig files used. -- KCONFIG_SPLITCONFIG=”directory name for individual SYMBOL.h files”. coreboot sets this to $(obj)/config. +- KCONFIG_SPLITCONFIG=”directory name for individual SYMBOL.h files”. + coreboot sets this to $(obj)/config. #### Used only for ‘make menuconfig’ -- MENUCONFIG_MODE=single_menu. Set to "single_menu" to enable. All other values disable the option. This makes submenus appear below the menu option instead of opening a new screen. +- MENUCONFIG_MODE=single_menu. Set to "single_menu" to enable. All other + values disable the option. This makes submenus appear below the menu option + instead of opening a new screen. -- MENUCONFIG_COLOR=<theme>. This sets the color theme for the menu from these options: +- MENUCONFIG_COLOR=<theme>. This sets the color theme for the menu from + these options: - mono => selects colors suitable for monochrome displays. - blackbg => selects a color scheme with black background. @@ -90,17 +132,21 @@ These variables were added to Kconfig specifically for coreboot and are not incl #### Unused in coreboot -Although these variables are not used by coreboot, their values should be left at the default values. Other values may have unexpected effects on the codebase. +Although these variables are not used by coreboot, their values should be left +at the default values. Other values may have unexpected effects on the +codebase. - KCONFIG_SEED=randconfig seed value. - KCONFIG_PROBABILITY=randconfig percent to set to y. -- KCONFIG_NOSILENTUPDATE=value. Define to prevent silent updates to .config file. +- KCONFIG_NOSILENTUPDATE=value. Define to prevent silent updates to .config + file. - KCONFIG_OVERWRITECONFIG=value. Define to prevent breaking a .config symlink. - KCONFIG_TRISTATE=filename of tristate.conf file. - SRCTREE=path to src directory. - KCONFIG_AUTOCONFIG=path and filename of the auto.conf file. - coreboot sets this to $(obj)/auto.conf. Although this value is actually set by coreboot, the resulting file is not used. + coreboot sets this to $(obj)/auto.conf. Although this value is actually + set by coreboot, the resulting file is not used. - CONFIG_=prefix for Kconfig output symbols. @@ -110,29 +156,60 @@ Although these variables are not used by coreboot, their values should be left a ## Kconfig Language -The Kconfig language has about 30 keywords, some overloaded, and some with the same meaning. Whitespace may have specific meaning, for example in the 'help' keyword. There are 8 logical operators for use in expressions, which allow values to be set based on other values. +The Kconfig language has about 30 keywords, some overloaded, and some with the +same meaning. Whitespace may have specific meaning, for example in the 'help' +keyword. There are 8 logical operators for use in expressions, which allow +values to be set based on other values. ### Terminology - Symbols - There are two types of symbols, "constant" and “non-constant”. - - Constant symbols are alphanumeric values used in expressions for comparison. The Kconfig language specification says that these must be surrounded by single or double quotes. - - Non-constant symbols are the 'config' values that are output into the saved .config, auto.conf and config.h files. Non-constant symbols are typically defined with the 'config' keyword, although they can also be defined with the 'choice' keyword. These symbols may be used in a file's expressions before they are defined. Valid characters for non-constant symbols are any combination of alphanumeric characters, underscore. Although “1234” is accepted as a symbol name, as is “o_o”, convention is to use all uppercase words that are descriptive of the symbol's use so they make sense when turned into CONFIG_NAME #defines. - -- Expressions - An expression is a logical evaluation. It can be as simple as a static 'y' or 'n', or can be a symbol. Alternatively, expressions can be complex evaluations of multiple symbols using the various logical operators. The Kconfig language allows these logical evaluations in several places. The most common use for complex expressions is following 'if' or ‘depends on’ keywords, but they can also be used to set the value for a prompt or default values. - -- Types - Each Kconfig symbol is one of the following types: bool, hex, int, string, or tristate. The tristate type is not used for coreboot, leaving just four types. As noted in the keyword summaries, a symbol must have a consistent type anywhere it is defined. Also, Kconfig will simply not display a symbol that has no type defined. A warning will be displayed in the terminal where menuconfig was run if this happens: _src/Kconfig:25:warning: config symbol defined without type_. - -- Prompts - Input prompts are the text associated with the symbols which shown to the user. The Kconfig language definition does not require surrounding the prompt’s text with quotes, however it is recommended that quotes be used for maximum compatibility. - -- Menu Entries - These keyword blocks create the symbols and questions that are visible in the front end. + - Constant symbols are alphanumeric values used in expressions for + comparison. The Kconfig language specification says that these must be + surrounded by single or double quotes. + - Non-constant symbols are the 'config' values that are output into the + saved .config, auto.conf and config.h files. Non-constant symbols are + typically defined with the 'config' keyword, although they can also be + defined with the 'choice' keyword. These symbols may be used in a file's + expressions before they are defined. Valid characters for non-constant + symbols are any combination of alphanumeric characters, underscore. + Although “1234” is accepted as a symbol name, as is “o_o”, convention is + to use all uppercase words that are descriptive of the symbol's use so + they make sense when turned into CONFIG_NAME #defines. + +- Expressions - An expression is a logical evaluation. It can be as simple as + a static 'y' or 'n', or can be a symbol. Alternatively, expressions can be + complex evaluations of multiple symbols using the various logical operators. + The Kconfig language allows these logical evaluations in several places. The + most common use for complex expressions is following 'if' or ‘depends on’ + keywords, but they can also be used to set the value for a prompt or default + values. + +- Types - Each Kconfig symbol is one of the following types: bool, hex, int, + string, or tristate. The tristate type is not used for coreboot, leaving just + four types. As noted in the keyword summaries, a symbol must have a consistent + type anywhere it is defined. Also, Kconfig will simply not display a symbol + that has no type defined. A warning will be displayed in the terminal where + menuconfig was run if this happens: + _src/Kconfig:25:warning: config symbol defined without type_. + +- Prompts - Input prompts are the text associated with the symbols which shown + to the user. The Kconfig language definition does not require surrounding the + prompt’s text with quotes, however it is recommended that quotes be used for + maximum compatibility. + +- Menu Entries - These keyword blocks create the symbols and questions that are + visible in the front end. ## Keywords ### bool -The 'bool' keyword assigns a boolean type to a symbol. The allowable values for a boolean type are 'n' or 'y'. The keyword can be followed by an optional prompt string which makes the symbol editable in one of the configuration front ends. +The 'bool' keyword assigns a boolean type to a symbol. The allowable values for +a boolean type are 'n' or 'y'. The keyword can be followed by an optional prompt +string which makes the symbol editable in one of the configuration front ends. ##### Usage: @@ -147,20 +224,29 @@ bool \[prompt\] \[if <expr>\] ##### Notes: -- Putting the prompt after the 'bool' keyword is the same as using a 'prompt' keyword later. See the 'prompt' keyword for more notes. -- Only the first type definition for each symbol is valid. Further matching definitions are fine, although unnecessary. Conflicting type definitions will be ignored, and a warning will be presented on the console where the configuration front end was run: _warning: ignoring type redefinition of 'SYMBOL' from 'hex' to 'integer'_. +- Putting the prompt after the 'bool' keyword is the same as using a 'prompt' + keyword later. See the 'prompt' keyword for more notes. +- Only the first type definition for each symbol is valid. Further matching + definitions are fine, although unnecessary. Conflicting type definitions will + be ignored, and a warning will be presented on the console where the + configuration front end was run: + _warning: ignoring type redefinition of 'SYMBOL' from 'hex' to 'integer'_. - Boolean symbols do not need a default and will default to ‘n’. ##### Restrictions: -- This keyword must be within a symbol definition block, started by the 'config' keyword. +- This keyword must be within a symbol definition block, started by the + 'config' keyword. -------------------------------------------------------------------------------- ### choice -This creates a selection list of one or more boolean symbols. For bools, only one of the symbols can be selected, and one will be be forced to be selected, either by a ‘default’ statement, or by selecting the first config option if there is no default value listed. +This creates a selection list of one or more boolean symbols. For bools, only +one of the symbols can be selected, and one will be be forced to be selected, +either by a ‘default’ statement, or by selecting the first config option if +there is no default value listed. ##### Usage: choice \[symbol\] @@ -200,19 +286,28 @@ choice \[symbol\] ##### Notes: -- If no symbol is associated with a choice, then you can not have multiple definitions of that choice. If a symbol is associated to the choice, then you may define the same choice (ie. with the same entries) in another place. Any selection in either location will update both choice menu selections. In coreboot, the value of the symbol is always 1. -- As shown in the example above, the choice between bools can be used to set the default for a non-bool type. This works best when the non-bool type does not have an input prompt. +- If no symbol is associated with a choice, then you can not have multiple + definitions of that choice. If a symbol is associated to the choice, then + you may define the same choice (ie. with the same entries) in another place. + Any selection in either location will update both choice menu selections. In + coreboot, the value of the symbol is always 1. +- As shown in the example above, the choice between bools can be used to set + the default for a non-bool type. This works best when the non-bool type + does not have an input prompt. ##### Restrictions: -- Symbols used for 'choice' entries must have input prompts defined using the 'prompt' keyword. -- Symbols used in 'choice' entries may not be enabled with a 'select' statement, they can be defaulted using a second Kconfig symbol however. +- Symbols used for 'choice' entries must have input prompts defined using the + 'prompt' keyword. +- Symbols used in 'choice' entries may not be enabled with a 'select' + statement, they can be defaulted using a second Kconfig symbol however. -------------------------------------------------------------------------------- ### comment -This keyword defines a line of text that is displayed to the user in the configuration frontend and is additionally written to the output files. +This keyword defines a line of text that is displayed to the user in the +configuration frontend and is additionally written to the output files. ##### Usage: @@ -229,13 +324,15 @@ comment <prompt> ##### Notes: -- Comments are only valid outside of config blocks, but can be within menu and if blocks. +- Comments are only valid outside of config blocks, but can be within menu and + if blocks. -------------------------------------------------------------------------------- ### config -This is the keyword that starts a block defining a Kconfig symbol. The symbol modifiers follow the 'config' statement. +This is the keyword that starts a block defining a Kconfig symbol. The symbol +modifiers follow the 'config' statement. ##### Usage: config <symbol> @@ -271,7 +368,10 @@ config <symbol> ### default -The ‘default’ keyword assigns a value to a symbol in the case where no preset value exists, i.e. the symbol is not present and assigned in .config. If there is no preset value, and no ‘default’ keyword, the user will be asked to enter a valid value when building coreboot. +The ‘default’ keyword assigns a value to a symbol in the case where no preset +value exists, i.e. the symbol is not present and assigned in .config. If there +is no preset value, and no ‘default’ keyword, the user will be asked to enter a +valid value when building coreboot. ##### Usage: @@ -289,15 +389,27 @@ default <expr> \[if <expr>\] ##### Notes: -- Kconfig defaults for symbols without a prompt *NEVER* affect existing legal symbol definitions in a .config file. The default only affects the symbol if there is no valid definition in a config file. This is a frequent source of confusion. It’s covered again in the Tips section below. -- The first valid 'default' entry for a symbol is always used. Any further 'default' statements for a symbol are ignored. This means that the order of Kconfig files is very important as the earlier files get to set the defaults first. They should be sourced in the order from most specific (mainboard Kconfig files) to the most generic (architecture-specific Kconfig files). -- If there is no 'default' entry for a symbol, it gets set to 'n', 0, 0x0, or “” depending on the type, however the 'bool' type is the only type that should be left without a default value. +- Kconfig defaults for symbols without a prompt *NEVER* affect existing legal + symbol definitions in a .config file. The default only affects the symbol if + there is no valid definition in a config file. This is a frequent source of + confusion. It’s covered again in the Tips section below. +- The first valid 'default' entry for a symbol is always used. Any further + 'default' statements for a symbol are ignored. This means that the order of + Kconfig files is very important as the earlier files get to set the defaults + first. They should be sourced in the order from most specific (mainboard + Kconfig files) to the most generic (architecture-specific Kconfig files). +- If there is no 'default' entry for a symbol, it gets set to 'n', 0, 0x0, or + “” depending on the type, however the 'bool' type is the only type that + should be left without a default value. -------------------------------------------------------------------------------- ### def_bool -‘def_bool’ is similar to the 'bool' keyword in that it sets a symbol’s type to boolean. It lets you set the type and default value at the same time, instead of setting the type and the prompt at the same time. It's typically used for symbols that don't have prompts. +‘def_bool’ is similar to the 'bool' keyword in that it sets a symbol’s type to +boolean. It lets you set the type and default value at the same time, instead +of setting the type and the prompt at the same time. It's typically used for +symbols that don't have prompts. ##### Usage: @@ -314,16 +426,24 @@ def_bool <expr> \[if <expr>\] ##### Notes: -- Only the first type definition for each symbol is valid. Further matching definitions are fine, although unnecessary. Conflicting type definitions will be ignored, and a warning will be presented on the console where the configuration front end was run: _warning: ignoring type redefinition of 'SYMBOL' from 'hex' to 'integer'_. +- Only the first type definition for each symbol is valid. Further matching + definitions are fine, although unnecessary. Conflicting type definitions will + be ignored, and a warning will be presented on the console where the + configuration front end was run: + _warning: ignoring type redefinition of 'SYMBOL' from 'hex' to 'integer'_. ##### Restrictions: -- This keyword must be within a symbol definition block, started by the 'config' keyword. +- This keyword must be within a symbol definition block, started by the + 'config' keyword. -------------------------------------------------------------------------------- ### depends on -This defines a dependency for a menu entry, including symbols and comments. It behaves the same as surrounding the menu entry with an if/endif block. If the ‘depends on’ expression evaluates to false, the 'prompt' value will not be printed, and defaults will not be set based on this block. +This defines a dependency for a menu entry, including symbols and comments. It +behaves the same as surrounding the menu entry with an if/endif block. If the +‘depends on’ expression evaluates to false, the 'prompt' value will not be +printed, and defaults will not be set based on this block. ##### Usage: @@ -341,31 +461,40 @@ depends on <expr> ##### Notes: -- Symbols that have multiple ‘depends on’ sections as above are equivalent to a single ‘depends on’ statement with sections joined by &&. So the above is the same as “depends on SPI_FLASH && ! ARCH_X86”. +- Symbols that have multiple ‘depends on’ sections as above are equivalent to a + single ‘depends on’ statement with sections joined by &&. So the above is + the same as “depends on SPI_FLASH && ! ARCH_X86”. -------------------------------------------------------------------------------- ### endchoice -This ends a choice block. See the 'choice' keyword for more information and an example. +This ends a choice block. See the 'choice' keyword for more information and an +example. -------------------------------------------------------------------------------- ### endif -This ends a block started by the 'if' keyword. See the 'if' keyword for more information and an example. +This ends a block started by the 'if' keyword. See the 'if' keyword for more +information and an example. -------------------------------------------------------------------------------- ### endmenu -This ends a menu block. See the 'menu' keyword for more information and an example. +This ends a menu block. See the 'menu' keyword for more information and an +example. -------------------------------------------------------------------------------- ### help -The 'help' keyword defines the subsequent block of text as help for a config or choice block. The help block is started by the 'help' keyword on a line by itself, and the indentation level of the next line controls the end of the help block. The help ends on the next non-blank line that has an indentation level less than the indentation level of the first line following the 'help' keyword. +The 'help' keyword defines the subsequent block of text as help for a config or +choice block. The help block is started by the 'help' keyword on a line by +itself, and the indentation level of the next line controls the end of the help +block. The help ends on the next non-blank line that has an indentation level +less than the indentation level of the first line following the 'help' keyword. ##### Usage: help <help text> @@ -375,12 +504,15 @@ help <help text> config COMPILER_GCC bool "GCC" help - Use the GNU Compiler Collection (GCC) to build coreboot. For details see http://gcc.gnu.org. + Use the GNU Compiler Collection (GCC) to build coreboot. For details + see http://gcc.gnu.org. ##### Notes: - Identical to the '---help---' keyword which isn’t used in coreboot. -- Other keywords are allowed inside the help block, and are not recognized as keywords so long as the indentation rules are followed, even if they start a line. +- Other keywords are allowed inside the help block, and are not recognized as + keywords so long as the indentation rules are followed, even if they start a + line. ##### Restrictions: @@ -390,7 +522,8 @@ help <help text> ### hex -This is another symbol type specifier, specifying an unsigned integer value formatted as hexadecimal. +This is another symbol type specifier, specifying an unsigned integer value +formatted as hexadecimal. ##### Usage: hex <expr> \[if <expr>\] @@ -404,22 +537,36 @@ hex <expr> \[if <expr>\] ##### Notes: -- Kconfig doesn’t complain if you don’t start the default value for a hex symbol with ‘0x’, but not doing so will lead to issues. It will update 10 to 0x10 without warning the user. -- Putting the prompt text after the 'hex' keyword is the same as using a 'prompt' keyword later. See the 'prompt' keyword for more notes. -- Only the first type definition for each symbol is valid. Further matching definitions are fine, although unnecessary. Conflicting type definitions will be ignored, and a warning will be presented on the console where the configuration front end was run: _warning: ignoring type redefinition of 'SYMBOL' from 'hex' to 'integer'_. +- Kconfig doesn’t complain if you don’t start the default value for a hex + symbol with ‘0x’, but not doing so will lead to issues. It will update 10 + to 0x10 without warning the user. +- Putting the prompt text after the 'hex' keyword is the same as using a + 'prompt' keyword later. See the 'prompt' keyword for more notes. +- Only the first type definition for each symbol is valid. Further matching + definitions are fine, although unnecessary. Conflicting type definitions will + be ignored, and a warning will be presented on the console where the + configuration front end was run: + _warning: ignoring type redefinition of 'SYMBOL' from 'hex' to 'integer'_. ##### Restrictions: -- This keyword must be within a symbol definition block, started by the 'config' keyword. +- This keyword must be within a symbol definition block, started by the + 'config' keyword. - 'hex' type symbols must have a 'default' entry set. -------------------------------------------------------------------------------- ### if -The 'if' keyword is overloaded, used in two different ways. The first definition enables and disables various other keywords, and follows the other keyword definition. This usage is shown in each of the other keywords' usage listings. +The 'if' keyword is overloaded, used in two different ways. The first definition +enables and disables various other keywords, and follows the other keyword +definition. This usage is shown in each of the other keywords' usage listings. -The second usage of the 'if' keyword is part of an if/endif block. Most items within an if/endif block are not evaluated, while others, such as the 'source' keyword, ignore the existence of the if/endif block completely. Symbols defined within an if/endif block are still created, although their default values are ignored - all values are set to 'n'. +The second usage of the 'if' keyword is part of an if/endif block. Most items +within an if/endif block are not evaluated, while others, such as the 'source' +keyword, ignore the existence of the if/endif block completely. Symbols defined +within an if/endif block are still created, although their default values are +ignored - all values are set to 'n'. ##### Usage: @@ -442,7 +589,7 @@ endif default n help This option is used to enable certain functions to make - coreboot work correctly on symmetric multi processor (SMP) systems. + coreboot work correctly on symmetric multi processor (SMP) systems. endif ##### Restrictions: @@ -452,7 +599,8 @@ endif ### int -A type setting keyword, defines a symbol as an integer, accepting only signed numeric values. The values can be further restricted with the ‘range’ keyword. +A type setting keyword, defines a symbol as an integer, accepting only signed +numeric values. The values can be further restricted with the ‘range’ keyword. ##### Usage: @@ -471,18 +619,26 @@ int <expr> \[if <expr>\] ##### Notes: -- Only the first type definition for each symbol is valid. Further matching definitions are fine, although unnecessary. Conflicting type definitions will be ignored, and a warning will be presented on the console where the configuration front end was run: _warning: ignoring type redefinition of 'SYMBOL' from 'hex' to 'integer'_. +- Only the first type definition for each symbol is valid. Further matching + definitions are fine, although unnecessary. Conflicting type definitions will + be ignored, and a warning will be presented on the console where the + configuration front end was run: + _warning: ignoring type redefinition of 'SYMBOL' from 'hex' to 'integer'_. ##### Restrictions: -- This keyword must be within a symbol definition block, started by the 'config' keyword. +- This keyword must be within a symbol definition block, started by the 'config' + keyword. - 'int' type symbols must have a default value set. -------------------------------------------------------------------------------- ### mainmenu -The 'mainmenu' keyword sets the title or title bar of the configuration front end, depending on how the configuration program decides to use it. It can only be specified once and at the very beginning of the top level Kconfig file, before any other statements. +The 'mainmenu' keyword sets the title or title bar of the configuration front + end, depending on how the configuration program decides to use it. It can only + be specified once and at the very beginning of the top level Kconfig file, + before any other statements. ##### Usage: @@ -499,7 +655,8 @@ mainmenu "coreboot configuration" ### menu -The 'menu' and 'endmenu' keywords tell the configuration front end that the enclosed statements are part of a group of related pieces. +The 'menu' and 'endmenu' keywords tell the configuration front end that the +enclosed statements are part of a group of related pieces. ##### Usage: @@ -545,7 +702,8 @@ endmenu ### prompt -The 'prompt' keyword sets the text displayed for a config symbol or choice in configuration front end. +The 'prompt' keyword sets the text displayed for a config symbol or choice in +configuration front end. ##### Usage: @@ -567,8 +725,15 @@ prompt <prompt> \[if <expr>\] ##### Notes: -- The same rules apply for menu entries defined by the 'prompt' keyword and other prompt types such as those defined by the 'int' or 'string' keywords. -- Redefining the prompt text in multiple instances of config symbols is allowed. Only the current prompt statement for a particular entry will be displayed by the front end in any given location. This means that multiple mainboards can set different prompt values for a symbol, and it would appear differently in each mainboard’s menu. The symbol can even have multiple entries in the same menu with different prompts if desired. For example, both of these would get printed, and changing either entry would change the other. +- The same rules apply for menu entries defined by the 'prompt' keyword and + other prompt types such as those defined by the 'int' or 'string' keywords. +- Redefining the prompt text in multiple instances of config symbols is allowed. + Only the current prompt statement for a particular entry will be displayed by + the front end in any given location. This means that multiple mainboards can + set different prompt values for a symbol, and it would appear differently in + each mainboard’s menu. The symbol can even have multiple entries in the same + menu with different prompts if desired. For example, both of these would get + printed, and changing either entry would change the other. config PROMPT_TEST string "Prompt value 1" @@ -576,8 +741,12 @@ prompt <prompt> \[if <expr>\] config PROMPT_TEST prompt "Prompt value 2" -- Although not required, it's recommended that you use quotes around prompt statements. -* If the prompt is redefined inside the SAME config entry, you will get a warning: _warning: prompt redefined_. For example, this is not allowed: +- Although not required, it's recommended that you use quotes around prompt + statements. +* If the prompt is redefined inside the SAME config entry, you will get a + warning: + _warning: prompt redefined_. + For example, this is not allowed: config PROMPT_TEST string "Prompt value 1" @@ -586,7 +755,8 @@ prompt <prompt> \[if <expr>\] ### range -This sets the allowable minimum and maximum entries for hex or int type config symbols. +This sets the allowable minimum and maximum entries for hex or int type config +symbols. ##### Usage: @@ -600,13 +770,17 @@ range <symbol> <symbol> \[if <expr>\] ##### Notes: -- Only the first definition of a range is used for any symbol. Further definitions will be ignored without warning. +- Only the first definition of a range is used for any symbol. Further + definitions will be ignored without warning. -------------------------------------------------------------------------------- ### select -The ‘select’ keyword is used within a bool type config block. In coreboot (and other projects that don't use modules), the 'select' keyword can force an unassociated bool type symbol to 'y'. When the symbol for the config block is ‘y’, the ‘select’ action is taken. Otherwise the bool is unaffected. +The ‘select’ keyword is used within a bool type config block. In coreboot (and +other projects that don't use modules), the 'select' keyword can force an +unassociated bool type symbol to 'y'. When the symbol for the config block is +‘y’, the ‘select’ action is taken. Otherwise the bool is unaffected. ##### Usage: @@ -625,7 +799,10 @@ select <symbol> \[if <expr>\] If unsure, say N. ##### Notes: -- Using the 'select' keyword can create logical contradictions in Kconfig, which will create warnings and fail to save the .config. Following is an example of an obviously invalid configuration, where selecting BOOLTEST violates the ‘depends on’ of BOOLTEST2: +- Using the 'select' keyword can create logical contradictions in Kconfig, which + will create warnings and fail to save the .config. Following is an example of + an obviously invalid configuration, where selecting BOOLTEST violates the + ‘depends on’ of BOOLTEST2: config BOOLTEST bool "bool Test" @@ -637,13 +814,18 @@ select <symbol> \[if <expr>\] ##### Restrictions: - The ‘select’ keyword only works on bool type symbols. -- Symbols created inside of choice blocks cannot be selected, and should be enabled by using default values instead. +- Symbols created inside of choice blocks cannot be selected, and should be + enabled by using default values instead. -------------------------------------------------------------------------------- ### source -The 'source' keyword functions much the same as an 'include' statement in c. This pulls one or more files into Kconfig at the location of the 'source' command. This statement is always parsed - there is no way to conditionally source a file. coreboot has modified the source statement slightly to handle directory globbing. The '*' character will match with any directory. +The 'source' keyword functions much the same as an 'include' statement in c. +This pulls one or more files into Kconfig at the location of the 'source' +command. This statement is always parsed - there is no way to conditionally +source a file. coreboot has modified the source statement slightly to handle +directory globbing. The '*' character will match with any directory. ##### Usage: @@ -664,25 +846,42 @@ source <prompt> ##### Notes: -- As with all prompt values, the 'source' prompt may be enclosed in single or double quotes, or left without any quotes. Using quotes is highly recommended however. -- The 'source' keyword loads files relative to the working directory where the Kconfig command was run. For coreboot, this is the root coreboot directory, so all source commands in the src directory need to start with ‘src/’. -- In coreboot's Kconfig, if a sourced file does not exist, the statement is simply ignored. This is different than other versions of Kconfig. -- 'source' pulls a file into the Kconfig tree at the location of the keyword. This allows for files containing small bits of the Kconfig tree to be pulled into a larger construct. A restriction on this is that the starting/ending keyword pairs must be within the same file - ‘endif’ cannot appear in a different file than the ‘if’ statement that it ends. The same is true of menu/endmenu and choice/endchoice pairs. - -The coreboot Kconfig structure uses this along with globbing to build up the mainboard directory. Each mainboard’s Kconfig.name file contains just two statements that generate a list of all the platform names: +- As with all prompt values, the 'source' prompt may be enclosed in single or + double quotes, or left without any quotes. Using quotes is highly recommended + however. +- The 'source' keyword loads files relative to the working directory where the + Kconfig command was run. For coreboot, this is the root coreboot directory, so + all source commands in the src directory need to start with ‘src/’. +- In coreboot's Kconfig, if a sourced file does not exist, the statement is + simply ignored. This is different than other versions of Kconfig. +- 'source' pulls a file into the Kconfig tree at the location of the keyword. + This allows for files containing small bits of the Kconfig tree to be pulled + into a larger construct. A restriction on this is that the starting/ending + keyword pairs must be within the same file - ‘endif’ cannot appear in a + different file than the ‘if’ statement that it ends. The same is true of + menu/endmenu and choice/endchoice pairs. + +The coreboot Kconfig structure uses this along with globbing to build up the +mainboard directory. Each mainboard’s Kconfig.name file contains just two +statements that generate a list of all the platform names: config BOARD_AMD_NORWICH bool "Norwich" ##### Restrictions: -- 'source' keywords always load in the specified file or files. There is no way to optionally pull in a file. Putting an if/endif block around a source command does not affect the source command, although it does affect the content. To avoid confusion, use if/endif blocks inside sourced files to remove their content if necessary. +- 'source' keywords always load in the specified file or files. There is no way + to optionally pull in a file. Putting an if/endif block around a source + command does not affect the source command, although it does affect the + content. To avoid confusion, use if/endif blocks inside sourced files to + remove their content if necessary. -------------------------------------------------------------------------------- ### string -The last of the symbol type assignment keywords. 'string' allows a text value to be entered. +The last of the symbol type assignment keywords. 'string' allows a text value to +be entered. ##### Usage: @@ -700,14 +899,25 @@ string <expr> \[if <expr>\] ##### Notes: -- Putting the prompt after the 'string' keyword is the same as using a 'prompt' keyword later. See the prompt keyword for more notes. -- Only the first type definition for each symbol is valid. Further matching definitions are fine, although unnecessary. Conflicting type definitions will be ignored, and a warning will be presented on the console where the configuration front end was run: _warning: ignoring type redefinition of 'SYMBOL' from 'hex' to 'string'_. -- Some characters may not get interpreted correctly when inside a string entry depending on how they are used - inside a C file, inside a Makefile, passed through a Makefile to a C file, or something else. It may be necessary to escape the characters at times. Because this is very dependent upon how the symbol is actually used, a definitive guide cannot be given here. -- 'string' type variables do NOT need a default, and will default to the value “”. +- Putting the prompt after the 'string' keyword is the same as using a 'prompt' +keyword later. See the prompt keyword for more notes. +- Only the first type definition for each symbol is valid. Further matching + definitions are fine, although unnecessary. Conflicting type definitions will + be ignored, and a warning will be presented on the console where the + configuration front end was run: + _warning: ignoring type redefinition of 'SYMBOL' from 'hex' to 'string'_. +- Some characters may not get interpreted correctly when inside a string entry + depending on how they are used - inside a C file, inside a Makefile, passed + through a Makefile to a C file, or something else. It may be necessary to + escape the characters at times. Because this is very dependent upon how the + symbol is actually used, a definitive guide cannot be given here. +- 'string' type variables do NOT need a default, and will default to the + value “”. ##### Restrictions: -- This keyword must be within a symbol definition block, started by the 'config' keyword. +- This keyword must be within a symbol definition block, started by the 'config' + keyword. -------------------------------------------------------------------------------- @@ -733,22 +943,33 @@ string <expr> \[if <expr>\] ### build/config.h -The config.h file is a very basic header file made up of a list of #define statements: +The config.h file is a very basic header file made up of a list of #define +statements: #define SYMBOL NAME XXX ##### Symbol types: -- bool, int, and hex types - Every symbol of one of these types created in the Kconfig tree is defined. It doesn’t matter whether they’re in an if/endif block, or have a ‘depends on’ statement - they ALL end up being defined in this file. -- String - Only string types that actually have a value associated with them are defined. +- bool, int, and hex types - Every symbol of one of these types created in the + Kconfig tree is defined. It doesn’t matter whether they’re in an if/endif + block, or have a ‘depends on’ statement - they ALL end up being defined in + this file. +- String - Only string types that actually have a value associated with them + are defined. -The config.h file uses 0 and 1 to represent Kconfig's 'n' and 'y' values respectively. String values are placed inside double quotes. +The config.h file uses 0 and 1 to represent Kconfig's 'n' and 'y' values +respectively. String values are placed inside double quotes. -The name of the file is controlled by the $KCONFIG_AUTOHEADER environment variable, which is set to $(obj)/config.h by the coreboot makefiles. +The name of the file is controlled by the $KCONFIG_AUTOHEADER environment +variable, which is set to $(obj)/config.h by the coreboot makefiles. -The prefix used for the symbols is controlled by the $CONFIG_ environment variable. This is not set in coreboot, which uses the default CONFIG_ prefix for all of its symbols. +The prefix used for the symbols is controlled by the $CONFIG_ environment +variable. This is not set in coreboot, which uses the default CONFIG_ prefix +for all of its symbols. -The coreboot makefile forces the config.h file to be included into all coreboot C files. This is done in Makefile.inc on the compiler command line using the “-include $(obj)/config.h” command line option. +The coreboot makefile forces the config.h file to be included into all coreboot +C files. This is done in Makefile.inc on the compiler command line using the +“-include $(obj)/config.h” command line option. Example of various symbol types in the config.h file: @@ -762,9 +983,15 @@ Example of various symbol types in the config.h file: ### .config -The .config file in the root directory is used as the input file, but also by the makefiles to set variable values. The main difference is that it does not contain all of the symbols. It excludes symbols defined in an if/endif block whose expression evaluated as false. Note that the symbol CONFIG_NORTHBRIDGE_INTEL_I440LX shown in the config.h example above is not present in the .config file. +The .config file in the root directory is used as the input file, but also by +the makefiles to set variable values. The main difference is that it does not +contain all of the symbols. It excludes symbols defined in an if/endif block +whose expression evaluated as false. Note that the symbol +CONFIG_NORTHBRIDGE_INTEL_I440LX shown in the config.h example above is not +present in the .config file. -In addition, the .config file below contains the 'comment' prompt text from the Kconfig, separating the blocks. +In addition, the .config file below contains the 'comment' prompt text from the +Kconfig, separating the blocks. ## General setup ## CONFIG_BOOTBLOCK_SOURCE="bootblock_simple.c" # String @@ -773,18 +1000,32 @@ In addition, the .config file below contains the 'comment' prompt text from the CONFIG_HAVE_ACPI_TABLES=y # Bool enabled # CONFIG_EXPERT is not set # Bool disabled -This file is included directly by the makefile, and sets the CONFIG symbols so that they are available during the build process. +This file is included directly by the makefile, and sets the CONFIG symbols so +that they are available during the build process. ### build/auto.conf -Although the controlling variable for the auto.conf filename, KCONFIG_AUTOCONFIG, is set in the coreboot makefiles, the auto.conf file itself is not used by coreboot. This file has the same syntax and structure as the .config file, but contains all symbols in the Kconfig tree, including those that are not enabled, or are excluded by if/endif blocks, or the 'depends on' keyword. The kconfig tool could be updated to not generate this file, but since it's not hurting anything, it's still being generated. +Although the controlling variable for the auto.conf filename, +KCONFIG_AUTOCONFIG, is set in the coreboot makefiles, the auto.conf file itself +is not used by coreboot. This file has the same syntax and structure as the +.config file, but contains all symbols in the Kconfig tree, including those that +are not enabled, or are excluded by if/endif blocks, or the 'depends on' +keyword. The kconfig tool could be updated to not generate this file, but since +it's not hurting anything, it's still being generated. ## Defconfig or Miniconfig files -Miniconfig files are the standard .config files with all of the symbols which are set to their default values stripped out. These files are very useful for debugging your config, as well as being the best way to store your .config file. If you store your config as a full config file, it will be much harder to maintain. Any Kconfig symbols with updated default values will retain their old values, and any symbols which have been removed will still remain in the file. Storing full config files just generally leads to a lot more maintenance than storing miniconfig files. +Miniconfig files are the standard .config files with all of the symbols which +are set to their default values stripped out. These files are very useful for +debugging your config, as well as being the best way to store your .config file. +If you store your config as a full config file, it will be much harder to +maintain. Any Kconfig symbols with updated default values will retain their old +values, and any symbols which have been removed will still remain in the file. +Storing full config files just generally leads to a lot more maintenance than +storing miniconfig files. The easiest way to generate the miniconfig file is by running @@ -815,7 +1056,13 @@ Save miniconfig files, as mentioned in the previous section. ### Disable values with ‘# CONFIG_SYMBOL is not set’ -A common mistake when trying to disable a value is to edit the .config file and change it from ‘CONFIG_SYMBOL=y’ to ‘CONFIG_SYMBOL=n’, but this doesn’t correctly disable the symbol. If the default value for the symbol is ‘n’ to begin with, this isn’t an issue - the symbol just gets ignored, and the default value is used. The problem is where the default for the symbol is ‘y’. When the bad entry in the .config file gets ignored, the value is set back to ‘y’, leading to much frustration. +A common mistake when trying to disable a value is to edit the .config file and +change it from ‘CONFIG_SYMBOL=y’ to ‘CONFIG_SYMBOL=n’, but this doesn’t +correctly disable the symbol. If the default value for the symbol is ‘n’ to +begin with, this isn’t an issue - the symbol just gets ignored, and the default +value is used. The problem is where the default for the symbol is ‘y’. When +the bad entry in the .config file gets ignored, the value is set back to ‘y’, +leading to much frustration. Always disable the Kconfig symbols in the .config file with the syntax: @@ -823,7 +1070,10 @@ Always disable the Kconfig symbols in the .config file with the syntax: ### Only the LAST instance of a symbol is used -When reading a saved .config file, Kconfig uses the LAST instance of a symbol that it comes across, and ignores any previous instances. This can be used to override symbols in a saved .config file by appending the new value to a config file. +When reading a saved .config file, Kconfig uses the LAST instance of a symbol +that it comes across, and ignores any previous instances. This can be used to +override symbols in a saved .config file by appending the new value to a config +file. For example: @@ -836,81 +1086,127 @@ After running ‘make olddefconfig’, ends up with the value: CONFIG_BOOLTEST=y -A case where this can be used is by a making a script to create two versions of a coreboot rom for a single platform. The first ROM could be built with serial console disabled, and the second ROM, built as a debug version, could have serial console enabled by overriding the "CONFIG_CONSOLE_SERIAL" symbol, and setting it to enabled. +A case where this can be used is by a making a script to create two versions of +a coreboot rom for a single platform. The first ROM could be built with serial +console disabled, and the second ROM, built as a debug version, could have +serial console enabled by overriding the "CONFIG_CONSOLE_SERIAL" symbol, and +setting it to enabled. ## General Kconfig Tips and Notes ### Default values for config options -The FIRST valid default that the Kconfig parser comes across will be used for each symbol. This means that the organization of the tree is very important. The structure should go from most specific at the top of the Kconfig tree to the most general later in the tree. In coreboot, the mainboard directories get loaded first, as they are sourced very early in the src/Kconfig file. Chipset Kconfig files get sourced later, and the architecture specific Kconfig files get sourced even later. This allows the mainboards to set their defaults early, overriding the default values set in chipset or architecture. +The FIRST valid default that the Kconfig parser comes across will be used for +each symbol. This means that the organization of the tree is very important. +The structure should go from most specific at the top of the Kconfig tree to the +most general later in the tree. In coreboot, the mainboard directories get +loaded first, as they are sourced very early in the src/Kconfig file. Chipset +Kconfig files get sourced later, and the architecture specific Kconfig files get +sourced even later. This allows the mainboards to set their defaults early, +overriding the default values set in chipset or architecture. -Due to this mechanism, a default defined early cannot be changed by a default set in a later Kconfig file. There are ways around this, involving 'depends on' statements, but they add additional variables which are generally just used internal to Kconfig. +Due to this mechanism, a default defined early cannot be changed by a default +set in a later Kconfig file. There are ways around this, involving 'depends on' +statements, but they add additional variables which are generally just used +internal to Kconfig. ### Select statement usage -The 'select' keyword forces the value of a symbol with a bool type to 'y'. It overrides any dependencies of the symbol, so using it carelessly can lead to unpredictable results. +The 'select' keyword forces the value of a symbol with a bool type to 'y'. It +overrides any dependencies of the symbol, so using it carelessly can lead to +unpredictable results. + +### All bool, int, and hex Kconfig symbols are ALWAYS defined in the C code -### All bool, int, and hex Kconfig symbols are ALWAYS defined in C if they are in a sourced Kconfig - do NOT use #ifdef CONFIG_SYMBOL +All bool, int, and hex Kconfig symbols are ALWAYS defined in the C code if they +are in a sourced Kconfig - do NOT use #ifdef CONFIG_SYMBOL -String symbols are the exception. All others (int, hex, etc.) are always defined in config.h. Never use an #ifdef statement for a Kconfig symbol other than strings in C to determine whether the symbol is enabled or disabled. So long as the symbol is in ANY sourced Kconfig file, it will be defined. Even if the symbol is only inside of an if/endif block where the if expression evaluates as false, the symbol STILL gets defined in the config.h file (though not in the .config file). +String symbols are the exception. All others (int, hex, etc.) are always +defined in config.h. Never use an #ifdef statement for a Kconfig symbol other +than strings in C to determine whether the symbol is enabled or disabled. So +long as the symbol is in ANY sourced Kconfig file, it will be defined. Even if +the symbol is only inside of an if/endif block where the if expression evaluates +as false, the symbol STILL gets defined in the config.h file (though not in the +.config file). -Use \#if IS_ENABLED(CONFIG_*) to be sure (it returns false for undefined symbols and defined-to-0 symbols alike). +Use \#if IS_ENABLED(CONFIG_*) to be sure (it returns false for undefined symbols +and defined-to-0 symbols alike). -### Symbols with prompts use default values *ONLY* when they are initially created or enabled. +### Symbols with prompts use defaults *ONLY* when initially created or enabled. -Symbols with a prompt which may be user-modified are NOT updated to default values when changing between platforms or modifying other symbols. There are only two times the default values are used: - 1. When a config is initially created. - 2. When a dependency which had previously kept the symbol from being active changes to allowing it to be active. +Symbols with a prompt which may be user-modified are NOT updated to default +values when changing between platforms or modifying other symbols. There are +only two times the default values are used: +1. When a config is initially created. +2. When a dependency which had previously kept the symbol from being active + changes to allowing it to be active. -Because of this, starting with a saved .config for one platform and updating it for another platform can lead to very different results than creating a platform from scratch. +Because of this, starting with a saved .config for one platform and updating it +for another platform can lead to very different results than creating a platform +from scratch. -### Symbols with no prompt will always be the default value (unless a 'select' is used). +### Symbols with no prompt will be the default value (unless 'select' is used). -Symbols that do not have a prompt will always use the first valid default value specified in Kconfig. They cannot be updated, even if they are modified in a saved .config file. As always, a 'select' statement overrides any specified 'default' or 'depends on' statement. +Symbols that do not have a prompt will always use the first valid default value +specified in Kconfig. They cannot be updated, even if they are modified in a +saved .config file. As always, a 'select' statement overrides any specified +'default' or 'depends on' statement. ## Differences between coreboot's Kconfig and other Kconfig implementations. - coreboot has added the glob operator '*' for the 'source' keyword. -- coreboot’s Kconfig always defines variables except for strings. In other Kconfig implementations, bools set to false/0/no are not defined. -- IS_ENABLED() is ‘false’ for undefined variables and ‘0’ variables. In Linux (where the macro comes from) it’s ‘true’ as soon as the variable is defined. -- coreboot’s version of Kconfig adds the KCONFIG_STRICT environment variable to error out if there are any issues in the Kconfig files. In the Linux kernel, Kconfig will generate a warning, but will still output an updated .config or config.h file. +- coreboot’s Kconfig always defines variables except for strings. In other + Kconfig implementations, bools set to false/0/no are not defined. +- IS_ENABLED() is ‘false’ for undefined variables and ‘0’ variables. In Linux + (where the macro comes from) it’s ‘true’ as soon as the variable is defined. +- coreboot’s version of Kconfig adds the KCONFIG_STRICT environment variable to + error out if there are any issues in the Kconfig files. In the Linux kernel, + Kconfig will generate a warning, but will still output an updated .config or + config.h file. ## Kconfig Editor Highlighting #### vim: -vim has syntax highlighting for Kconfig built in (or at least as a part of vim-common), but most editors do not. +vim has syntax highlighting for Kconfig built in (or at least as a part of +vim-common), but most editors do not. #### ultraedit: -[https://github.com/martinlroth/wordfiles/blob/master/kconfig.uew](https://github.com/martinlroth/wordfiles/blob/master/kconfig.uew) +https://github.com/martinlroth/wordfiles/blob/master/kconfig.uew #### atom: -[https://github.com/martinlroth/language-kconfig](https://github.com/martinlroth/language-kconfig) +https://github.com/martinlroth/language-kconfig ## Syntax Checking: -The Kconfig utility does some basic syntax checking on the Kconfig tree. Running "make silentoldconfig" will show any errors that the Kconfig utility sees. +The Kconfig utility does some basic syntax checking on the Kconfig tree. +Running "make silentoldconfig" will show any errors that the Kconfig utility +sees. ### util/kconfig_lint -Because the Kconfig utility is relatively forgiving, and ignores issues that a developer might be interested in, kconfig_lint, another Kconfig checker has been written. +Because the Kconfig utility is relatively forgiving, and ignores issues that a +developer might be interested in, kconfig_lint, another Kconfig checker has been +written. -The file kconfig_lint and its associated readme can be found in the coreboot utils/lint directory. It is useful for parsing the Kconfig tree, and for showing warnings, errors, and notes about coreboot’s Kconfig files. +The file kconfig_lint and its associated readme can be found in the coreboot +utils/lint directory. It is useful for parsing the Kconfig tree, and for +showing warnings, errors, and notes about coreboot’s Kconfig files. kconfig_lint <options> @@ -924,10 +1220,16 @@ The file kconfig_lint and its associated readme can be found in the coreboot uti -G|--no_git_grep Use standard grep tools instead of git grep -The -p option is very useful for debugging Kconfig issues, because it reads all of the Kconfig files in the order that the Kconfig tools would read them, and prints it out, along with where each line came from and which menu it appears in. +The -p option is very useful for debugging Kconfig issues, because it reads all +of the Kconfig files in the order that the Kconfig tools would read them, and +prints it out, along with where each line came from and which menu it appears +in. ## License: -This work is licensed under the Creative Commons Attribution 4.0 International License. To view a copy of this license, visit https://creativecommons.org/licenses/by/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. +This work is licensed under the Creative Commons Attribution 4.0 International +License. To view a copy of this license, visit +https://creativecommons.org/licenses/by/4.0/ or send a letter to Creative +Commons, PO Box 1866, Mountain View, CA 94042, USA. Code examples snippets are licensed under GPLv2, and are used here under fair use laws. |