| 1 |
Introduction |
|---|
| 2 |
------------ |
|---|
| 3 |
|
|---|
| 4 |
The configuration database is collection of configuration options |
|---|
| 5 |
organized in a tree structure: |
|---|
| 6 |
|
|---|
| 7 |
+- Code maturity level options |
|---|
| 8 |
| +- Prompt for development and/or incomplete code/drivers |
|---|
| 9 |
+- General setup |
|---|
| 10 |
| +- Networking support |
|---|
| 11 |
| +- System V IPC |
|---|
| 12 |
| +- BSD Process Accounting |
|---|
| 13 |
| +- Sysctl support |
|---|
| 14 |
+- Loadable module support |
|---|
| 15 |
| +- Enable loadable module support |
|---|
| 16 |
| +- Set version information on all module symbols |
|---|
| 17 |
| +- Kernel module loader |
|---|
| 18 |
+- ... |
|---|
| 19 |
|
|---|
| 20 |
Every entry has its own dependencies. These dependencies are used |
|---|
| 21 |
to determine the visible of an entry. Any child entry is only |
|---|
| 22 |
visible if its parent entry is also visible. |
|---|
| 23 |
|
|---|
| 24 |
Menu entries |
|---|
| 25 |
------------ |
|---|
| 26 |
|
|---|
| 27 |
Most entries define a config option, all other entries help to organize |
|---|
| 28 |
them. A single configuration option is defined like this: |
|---|
| 29 |
|
|---|
| 30 |
config MODVERSIONS |
|---|
| 31 |
bool "Set version information on all module symbols" |
|---|
| 32 |
depends MODULES |
|---|
| 33 |
help |
|---|
| 34 |
Usually, modules have to be recompiled whenever you switch to a new |
|---|
| 35 |
kernel. ... |
|---|
| 36 |
|
|---|
| 37 |
Every line starts with a key word and can be followed by multiple |
|---|
| 38 |
arguments. "config" starts a new config entry. The following lines |
|---|
| 39 |
define attributes for this config option. Attributes can be the type of |
|---|
| 40 |
the config option, input prompt, dependencies, help text and default |
|---|
| 41 |
values. A config option can be defined multiple times with the same |
|---|
| 42 |
name, but every definition can have only a single input prompt and the |
|---|
| 43 |
type must not conflict. |
|---|
| 44 |
|
|---|
| 45 |
Menu attributes |
|---|
| 46 |
--------------- |
|---|
| 47 |
|
|---|
| 48 |
A menu entry can have a number of attributes. Not all of them are |
|---|
| 49 |
applicable everywhere (see syntax). |
|---|
| 50 |
|
|---|
| 51 |
- type definition: "bool"/"tristate"/"string"/"hex"/"integer" |
|---|
| 52 |
Every config option must have a type. There are only two basic types: |
|---|
| 53 |
tristate and string, the other types base on these two. The type |
|---|
| 54 |
definition optionally accepts an input prompt, so these two examples |
|---|
| 55 |
are equivalent: |
|---|
| 56 |
|
|---|
| 57 |
bool "Networking support" |
|---|
| 58 |
and |
|---|
| 59 |
bool |
|---|
| 60 |
prompt "Networking support" |
|---|
| 61 |
|
|---|
| 62 |
- input prompt: "prompt" <prompt> ["if" <expr>] |
|---|
| 63 |
Every menu entry can have at most one prompt, which is used to display |
|---|
| 64 |
to the user. Optionally dependencies only for this prompt can be added |
|---|
| 65 |
with "if". |
|---|
| 66 |
|
|---|
| 67 |
- default value: "default" <symbol> ["if" <expr>] |
|---|
| 68 |
A config option can have any number of default values. If multiple |
|---|
| 69 |
default values are visible, only the first defined one is active. |
|---|
| 70 |
Default values are not limited to the menu entry, where they are |
|---|
| 71 |
defined, this means the default can be defined somewhere else or be |
|---|
| 72 |
overriden by an earlier definition. |
|---|
| 73 |
The default value is only assigned to the config symbol if no other |
|---|
| 74 |
value was set by the user (via the input prompt above). If an input |
|---|
| 75 |
prompt is visible the default value is presented to the user and can |
|---|
| 76 |
be overridden by him. |
|---|
| 77 |
Optionally dependencies only for this default value can be added with |
|---|
| 78 |
"if". |
|---|
| 79 |
|
|---|
| 80 |
- dependencies: "depends on"/"requires" <expr> |
|---|
| 81 |
This defines a dependency for this menu entry. If multiple |
|---|
| 82 |
dependencies are defined they are connected with '&&'. Dependencies |
|---|
| 83 |
are applied to all other options within this menu entry (which also |
|---|
| 84 |
accept "if" expression), so these two examples are equivalent: |
|---|
| 85 |
|
|---|
| 86 |
bool "foo" if BAR |
|---|
| 87 |
default y if BAR |
|---|
| 88 |
and |
|---|
| 89 |
depends on BAR |
|---|
| 90 |
bool "foo" |
|---|
| 91 |
default y |
|---|
| 92 |
|
|---|
| 93 |
- help text: "help" |
|---|
| 94 |
This defines a help text. The end of the help text is determined by |
|---|
| 95 |
the level indentation, this means it ends at the first line which has |
|---|
| 96 |
a smaller indentation than the first line of the help text. |
|---|
| 97 |
|
|---|
| 98 |
|
|---|
| 99 |
Menu dependencies |
|---|
| 100 |
----------------- |
|---|
| 101 |
|
|---|
| 102 |
Dependencies define the visibility of a menu entry and can also reduce |
|---|
| 103 |
the input range of tristate symbols. The tristate logic used in the |
|---|
| 104 |
expressions uses one more state than normal boolean logic to express the |
|---|
| 105 |
module state. Dependency expressions have the following syntax: |
|---|
| 106 |
|
|---|
| 107 |
<expr> ::= <symbol> (1) |
|---|
| 108 |
<symbol> '=' <symbol> (2) |
|---|
| 109 |
<symbol> '!=' <symbol> (3) |
|---|
| 110 |
'(' <expr> ')' (4) |
|---|
| 111 |
'!' <expr> (5) |
|---|
| 112 |
<expr> '||' <expr> (6) |
|---|
| 113 |
<expr> '&&' <expr> (7) |
|---|
| 114 |
|
|---|
| 115 |
Expressions are listed in decreasing order of precedence. |
|---|
| 116 |
|
|---|
| 117 |
(1) Convert the symbol into an expression. Boolean and tristate symbols |
|---|
| 118 |
are simply converted into the respective expression values. All |
|---|
| 119 |
other symbol types result in 'n'. |
|---|
| 120 |
(2) If the values of both symbols are equal, it returns 'y', |
|---|
| 121 |
otherwise 'n'. |
|---|
| 122 |
(3) If the values of both symbols are equal, it returns 'n', |
|---|
| 123 |
otherwise 'y'. |
|---|
| 124 |
(4) Returns the value of the expression. Used to override precedence. |
|---|
| 125 |
(5) Returns the result of (2-/expr/). |
|---|
| 126 |
(6) Returns the result of min(/expr/, /expr/). |
|---|
| 127 |
(7) Returns the result of max(/expr/, /expr/). |
|---|
| 128 |
|
|---|
| 129 |
An expression can have a value of 'n', 'm' or 'y' (or 0, 1, 2 |
|---|
| 130 |
respectively for calculations). A menu entry becomes visible when it's |
|---|
| 131 |
expression evaluates to 'm' or 'y'. |
|---|
| 132 |
|
|---|
| 133 |
There are two type of symbols: constant and nonconstant symbols. |
|---|
| 134 |
Nonconstant symbols are the most common ones and are defined with the |
|---|
| 135 |
'config' statement. Nonconstant symbols consist entirely of alphanumeric |
|---|
| 136 |
characters or underscores. |
|---|
| 137 |
Constant symbols are only part of expressions. Constant symbols are |
|---|
| 138 |
always surrounded by single or double quotes. Within the quote any |
|---|
| 139 |
other character is allowed and the quotes can be escaped using '\'. |
|---|
| 140 |
|
|---|
| 141 |
Menu structure |
|---|
| 142 |
-------------- |
|---|
| 143 |
|
|---|
| 144 |
The position of a menu entry in the tree is determined in two ways. First |
|---|
| 145 |
it can be specified explicitely: |
|---|
| 146 |
|
|---|
| 147 |
menu "Network device support" |
|---|
| 148 |
depends NET |
|---|
| 149 |
|
|---|
| 150 |
config NETDEVICES |
|---|
| 151 |
... |
|---|
| 152 |
|
|---|
| 153 |
endmenu |
|---|
| 154 |
|
|---|
| 155 |
All entries within the "menu" ... "endmenu" block become a submenu of |
|---|
| 156 |
"Network device support". All subentries inherit the dependencies from |
|---|
| 157 |
the menu entry, e.g. this means the dependency "NET" is added to the |
|---|
| 158 |
dependency list of the config option NETDEVICES. |
|---|
| 159 |
|
|---|
| 160 |
The other way to generate the menu structure is done by analyzing the |
|---|
| 161 |
dependencies. If a menu entry somehow depends on the previous entry, it |
|---|
| 162 |
can be made a submenu of it. First the the previous (parent) symbol must |
|---|
| 163 |
be part of the dependency list and then one of these two condititions |
|---|
| 164 |
must be true: |
|---|
| 165 |
- the child entry must become invisible, if the parent is set to 'n' |
|---|
| 166 |
- the child entry must only be visible, if the parent is visible |
|---|
| 167 |
|
|---|
| 168 |
config MODULES |
|---|
| 169 |
bool "Enable loadable module support" |
|---|
| 170 |
|
|---|
| 171 |
config MODVERSIONS |
|---|
| 172 |
bool "Set version information on all module symbols" |
|---|
| 173 |
depends MODULES |
|---|
| 174 |
|
|---|
| 175 |
comment "module support disabled" |
|---|
| 176 |
depends !MODULES |
|---|
| 177 |
|
|---|
| 178 |
MODVERSIONS directly depends on MODULES, this means it's only visible if |
|---|
| 179 |
MODULES is different from 'n'. The comment on the other hand is always |
|---|
| 180 |
visible when MODULES it's visible (the (empty) dependency of MODULES is |
|---|
| 181 |
also part of the comment dependencies). |
|---|
| 182 |
|
|---|
| 183 |
|
|---|
| 184 |
Kconfig syntax |
|---|
| 185 |
-------------- |
|---|
| 186 |
|
|---|
| 187 |
The configuration file describes a series of menu entries, where every |
|---|
| 188 |
line starts with a keyword (except help texts). The following keywords |
|---|
| 189 |
end a menu entry: |
|---|
| 190 |
- config |
|---|
| 191 |
- choice/endchoice |
|---|
| 192 |
- comment |
|---|
| 193 |
- menu/endmenu |
|---|
| 194 |
- if/endif |
|---|
| 195 |
- source |
|---|
| 196 |
The first four also start the definition of a menu entry. |
|---|
| 197 |
|
|---|
| 198 |
config: |
|---|
| 199 |
|
|---|
| 200 |
"config" <symbol> |
|---|
| 201 |
<config options> |
|---|
| 202 |
|
|---|
| 203 |
This defines a config symbol <symbol> and accepts any of above |
|---|
| 204 |
attributes as options. |
|---|
| 205 |
|
|---|
| 206 |
choices: |
|---|
| 207 |
|
|---|
| 208 |
"choice" |
|---|
| 209 |
<choice options> |
|---|
| 210 |
<choice block> |
|---|
| 211 |
"endchoice" |
|---|
| 212 |
|
|---|
| 213 |
This defines a choice group and accepts any of above attributes as |
|---|
| 214 |
options. A choice can only be of type bool or tristate, while a boolean |
|---|
| 215 |
choice only allows a single config entry to be selected, a tristate |
|---|
| 216 |
choice also allows any number of config entries to be set to 'm'. This |
|---|
| 217 |
can be used if multiple drivers for a single hardware exists and only a |
|---|
| 218 |
single driver can be compiled/loaded into the kernel, but all drivers |
|---|
| 219 |
can be compiled as modules. |
|---|
| 220 |
A choice accepts another option "optional", which allows to set the |
|---|
| 221 |
choice to 'n' and no entry needs to be selected. |
|---|
| 222 |
|
|---|
| 223 |
comment: |
|---|
| 224 |
|
|---|
| 225 |
"comment" <prompt> |
|---|
| 226 |
<comment options> |
|---|
| 227 |
|
|---|
| 228 |
This defines a comment which is displayed to the user during the |
|---|
| 229 |
configuration process and is also echoed to the output files. The only |
|---|
| 230 |
possible options are dependencies. |
|---|
| 231 |
|
|---|
| 232 |
menu: |
|---|
| 233 |
|
|---|
| 234 |
"menu" <prompt> |
|---|
| 235 |
<menu options> |
|---|
| 236 |
<menu block> |
|---|
| 237 |
"endmenu" |
|---|
| 238 |
|
|---|
| 239 |
This defines a menu block, see "Menu structure" above for more |
|---|
| 240 |
information. The only possible options are dependencies. |
|---|
| 241 |
|
|---|
| 242 |
if: |
|---|
| 243 |
|
|---|
| 244 |
"if" <expr> |
|---|
| 245 |
<if block> |
|---|
| 246 |
"endif" |
|---|
| 247 |
|
|---|
| 248 |
This defines an if block. The dependency expression <expr> is appended |
|---|
| 249 |
to all enclosed menu entries. |
|---|
| 250 |
|
|---|
| 251 |
source: |
|---|
| 252 |
|
|---|
| 253 |
"source" <prompt> |
|---|
| 254 |
|
|---|
| 255 |
This reads the specified configuration file. This file is always parsed. |
|---|