| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 visibility 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"/"int" | 
|  | 52 | Every config option must have a type. There are only two basic types: | 
|  | 53 | tristate and string, the other types are based 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" <expr> ["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 | overridden 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 an "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 | - reverse dependencies: "select" <symbol> ["if" <expr>] | 
|  | 94 | While normal dependencies reduce the upper limit of a symbol (see | 
|  | 95 | below), reverse dependencies can be used to force a lower limit of | 
|  | 96 | another symbol. The value of the current menu symbol is used as the | 
|  | 97 | minimal value <symbol> can be set to. If <symbol> is selected multiple | 
|  | 98 | times, the limit is set to the largest selection. | 
|  | 99 | Reverse dependencies can only be used with boolean or tristate | 
|  | 100 | symbols. | 
|  | 101 |  | 
|  | 102 | - numerical ranges: "range" <symbol> <symbol> ["if" <expr>] | 
|  | 103 | This allows to limit the range of possible input values for int | 
|  | 104 | and hex symbols. The user can only input a value which is larger than | 
|  | 105 | or equal to the first symbol and smaller than or equal to the second | 
|  | 106 | symbol. | 
|  | 107 |  | 
|  | 108 | - help text: "help" or "---help---" | 
|  | 109 | This defines a help text. The end of the help text is determined by | 
|  | 110 | the indentation level, this means it ends at the first line which has | 
|  | 111 | a smaller indentation than the first line of the help text. | 
|  | 112 | "---help---" and "help" do not differ in behaviour, "---help---" is | 
|  | 113 | used to help visually seperate configuration logic from help within | 
|  | 114 | the file as an aid to developers. | 
|  | 115 |  | 
|  | 116 |  | 
|  | 117 | Menu dependencies | 
|  | 118 | ----------------- | 
|  | 119 |  | 
|  | 120 | Dependencies define the visibility of a menu entry and can also reduce | 
|  | 121 | the input range of tristate symbols. The tristate logic used in the | 
|  | 122 | expressions uses one more state than normal boolean logic to express the | 
|  | 123 | module state. Dependency expressions have the following syntax: | 
|  | 124 |  | 
|  | 125 | <expr> ::= <symbol>                             (1) | 
|  | 126 | <symbol> '=' <symbol>                (2) | 
|  | 127 | <symbol> '!=' <symbol>               (3) | 
|  | 128 | '(' <expr> ')'                       (4) | 
|  | 129 | '!' <expr>                           (5) | 
|  | 130 | <expr> '&&' <expr>                   (6) | 
|  | 131 | <expr> '||' <expr>                   (7) | 
|  | 132 |  | 
|  | 133 | Expressions are listed in decreasing order of precedence. | 
|  | 134 |  | 
|  | 135 | (1) Convert the symbol into an expression. Boolean and tristate symbols | 
|  | 136 | are simply converted into the respective expression values. All | 
|  | 137 | other symbol types result in 'n'. | 
|  | 138 | (2) If the values of both symbols are equal, it returns 'y', | 
|  | 139 | otherwise 'n'. | 
|  | 140 | (3) If the values of both symbols are equal, it returns 'n', | 
|  | 141 | otherwise 'y'. | 
|  | 142 | (4) Returns the value of the expression. Used to override precedence. | 
|  | 143 | (5) Returns the result of (2-/expr/). | 
|  | 144 | (6) Returns the result of min(/expr/, /expr/). | 
|  | 145 | (7) Returns the result of max(/expr/, /expr/). | 
|  | 146 |  | 
|  | 147 | An expression can have a value of 'n', 'm' or 'y' (or 0, 1, 2 | 
|  | 148 | respectively for calculations). A menu entry becomes visible when it's | 
|  | 149 | expression evaluates to 'm' or 'y'. | 
|  | 150 |  | 
|  | 151 | There are two types of symbols: constant and nonconstant symbols. | 
|  | 152 | Nonconstant symbols are the most common ones and are defined with the | 
|  | 153 | 'config' statement. Nonconstant symbols consist entirely of alphanumeric | 
|  | 154 | characters or underscores. | 
|  | 155 | Constant symbols are only part of expressions. Constant symbols are | 
|  | 156 | always surrounded by single or double quotes. Within the quote any | 
|  | 157 | other character is allowed and the quotes can be escaped using '\'. | 
|  | 158 |  | 
|  | 159 | Menu structure | 
|  | 160 | -------------- | 
|  | 161 |  | 
|  | 162 | The position of a menu entry in the tree is determined in two ways. First | 
|  | 163 | it can be specified explicitly: | 
|  | 164 |  | 
|  | 165 | menu "Network device support" | 
|  | 166 | depends NET | 
|  | 167 |  | 
|  | 168 | config NETDEVICES | 
|  | 169 | ... | 
|  | 170 |  | 
|  | 171 | endmenu | 
|  | 172 |  | 
|  | 173 | All entries within the "menu" ... "endmenu" block become a submenu of | 
|  | 174 | "Network device support". All subentries inherit the dependencies from | 
|  | 175 | the menu entry, e.g. this means the dependency "NET" is added to the | 
|  | 176 | dependency list of the config option NETDEVICES. | 
|  | 177 |  | 
|  | 178 | The other way to generate the menu structure is done by analyzing the | 
|  | 179 | dependencies. If a menu entry somehow depends on the previous entry, it | 
|  | 180 | can be made a submenu of it. First, the previous (parent) symbol must | 
|  | 181 | be part of the dependency list and then one of these two conditions | 
|  | 182 | must be true: | 
|  | 183 | - the child entry must become invisible, if the parent is set to 'n' | 
|  | 184 | - the child entry must only be visible, if the parent is visible | 
|  | 185 |  | 
|  | 186 | config MODULES | 
|  | 187 | bool "Enable loadable module support" | 
|  | 188 |  | 
|  | 189 | config MODVERSIONS | 
|  | 190 | bool "Set version information on all module symbols" | 
|  | 191 | depends MODULES | 
|  | 192 |  | 
|  | 193 | comment "module support disabled" | 
|  | 194 | depends !MODULES | 
|  | 195 |  | 
|  | 196 | MODVERSIONS directly depends on MODULES, this means it's only visible if | 
|  | 197 | MODULES is different from 'n'. The comment on the other hand is always | 
|  | 198 | visible when MODULES is visible (the (empty) dependency of MODULES is | 
|  | 199 | also part of the comment dependencies). | 
|  | 200 |  | 
|  | 201 |  | 
|  | 202 | Kconfig syntax | 
|  | 203 | -------------- | 
|  | 204 |  | 
|  | 205 | The configuration file describes a series of menu entries, where every | 
|  | 206 | line starts with a keyword (except help texts). The following keywords | 
|  | 207 | end a menu entry: | 
|  | 208 | - config | 
|  | 209 | - menuconfig | 
|  | 210 | - choice/endchoice | 
|  | 211 | - comment | 
|  | 212 | - menu/endmenu | 
|  | 213 | - if/endif | 
|  | 214 | - source | 
|  | 215 | The first five also start the definition of a menu entry. | 
|  | 216 |  | 
|  | 217 | config: | 
|  | 218 |  | 
|  | 219 | "config" <symbol> | 
|  | 220 | <config options> | 
|  | 221 |  | 
|  | 222 | This defines a config symbol <symbol> and accepts any of above | 
|  | 223 | attributes as options. | 
|  | 224 |  | 
|  | 225 | menuconfig: | 
|  | 226 | "menuconfig" <symbol> | 
|  | 227 | <config options> | 
|  | 228 |  | 
|  | 229 | This is similiar to the simple config entry above, but it also gives a | 
|  | 230 | hint to front ends, that all suboptions should be displayed as a | 
|  | 231 | separate list of options. | 
|  | 232 |  | 
|  | 233 | choices: | 
|  | 234 |  | 
|  | 235 | "choice" | 
|  | 236 | <choice options> | 
|  | 237 | <choice block> | 
|  | 238 | "endchoice" | 
|  | 239 |  | 
|  | 240 | This defines a choice group and accepts any of above attributes as | 
|  | 241 | options. A choice can only be of type bool or tristate, while a boolean | 
|  | 242 | choice only allows a single config entry to be selected, a tristate | 
|  | 243 | choice also allows any number of config entries to be set to 'm'. This | 
|  | 244 | can be used if multiple drivers for a single hardware exists and only a | 
|  | 245 | single driver can be compiled/loaded into the kernel, but all drivers | 
|  | 246 | can be compiled as modules. | 
|  | 247 | A choice accepts another option "optional", which allows to set the | 
|  | 248 | choice to 'n' and no entry needs to be selected. | 
|  | 249 |  | 
|  | 250 | comment: | 
|  | 251 |  | 
|  | 252 | "comment" <prompt> | 
|  | 253 | <comment options> | 
|  | 254 |  | 
|  | 255 | This defines a comment which is displayed to the user during the | 
|  | 256 | configuration process and is also echoed to the output files. The only | 
|  | 257 | possible options are dependencies. | 
|  | 258 |  | 
|  | 259 | menu: | 
|  | 260 |  | 
|  | 261 | "menu" <prompt> | 
|  | 262 | <menu options> | 
|  | 263 | <menu block> | 
|  | 264 | "endmenu" | 
|  | 265 |  | 
|  | 266 | This defines a menu block, see "Menu structure" above for more | 
|  | 267 | information. The only possible options are dependencies. | 
|  | 268 |  | 
|  | 269 | if: | 
|  | 270 |  | 
|  | 271 | "if" <expr> | 
|  | 272 | <if block> | 
|  | 273 | "endif" | 
|  | 274 |  | 
|  | 275 | This defines an if block. The dependency expression <expr> is appended | 
|  | 276 | to all enclosed menu entries. | 
|  | 277 |  | 
|  | 278 | source: | 
|  | 279 |  | 
|  | 280 | "source" <prompt> | 
|  | 281 |  | 
|  | 282 | This reads the specified configuration file. This file is always parsed. |