Blame view

Documentation/kbuild/kconfig-language.txt 13.9 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
  Introduction
  ------------
e95be9a53   Daniel Walker   [PATCH] docs: sma...
3
  The configuration database is a collection of configuration options
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  organized in a tree structure:
  
  	+- Code maturity level options
  	|  +- Prompt for development and/or incomplete code/drivers
  	+- General setup
  	|  +- Networking support
  	|  +- System V IPC
  	|  +- BSD Process Accounting
  	|  +- Sysctl support
  	+- Loadable module support
  	|  +- Enable loadable module support
  	|     +- Set version information on all module symbols
  	|     +- Kernel module loader
  	+- ...
  
  Every entry has its own dependencies. These dependencies are used
  to determine the visibility of an entry. Any child entry is only
  visible if its parent entry is also visible.
  
  Menu entries
  ------------
0486bc909   Randy Dunlap   kconfig: add hint...
25
  Most entries define a config option; all other entries help to organize
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
26
27
28
29
  them. A single configuration option is defined like this:
  
  config MODVERSIONS
  	bool "Set version information on all module symbols"
bef1f4026   Robert P. J. Day   kconfig: Standard...
30
  	depends on MODULES
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
  	help
  	  Usually, modules have to be recompiled whenever you switch to a new
  	  kernel.  ...
  
  Every line starts with a key word and can be followed by multiple
  arguments.  "config" starts a new config entry. The following lines
  define attributes for this config option. Attributes can be the type of
  the config option, input prompt, dependencies, help text and default
  values. A config option can be defined multiple times with the same
  name, but every definition can have only a single input prompt and the
  type must not conflict.
  
  Menu attributes
  ---------------
  
  A menu entry can have a number of attributes. Not all of them are
  applicable everywhere (see syntax).
  
  - type definition: "bool"/"tristate"/"string"/"hex"/"int"
    Every config option must have a type. There are only two basic types:
0486bc909   Randy Dunlap   kconfig: add hint...
51
    tristate and string; the other types are based on these two. The type
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
    definition optionally accepts an input prompt, so these two examples
    are equivalent:
  
  	bool "Networking support"
    and
  	bool
  	prompt "Networking support"
  
  - input prompt: "prompt" <prompt> ["if" <expr>]
    Every menu entry can have at most one prompt, which is used to display
    to the user. Optionally dependencies only for this prompt can be added
    with "if".
  
  - default value: "default" <expr> ["if" <expr>]
    A config option can have any number of default values. If multiple
    default values are visible, only the first defined one is active.
83dcde4e1   Jan Engelhardt   kconfig: linguist...
68
69
    Default values are not limited to the menu entry where they are
    defined. This means the default can be defined somewhere else or be
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
70
71
72
73
74
    overridden by an earlier definition.
    The default value is only assigned to the config symbol if no other
    value was set by the user (via the input prompt above). If an input
    prompt is visible the default value is presented to the user and can
    be overridden by him.
83dcde4e1   Jan Engelhardt   kconfig: linguist...
75
    Optionally, dependencies only for this default value can be added with
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
76
    "if".
6e66b9005   Randy Dunlap   kconfig: update k...
77
78
79
80
81
82
  - type definition + default value:
  	"def_bool"/"def_tristate" <expr> ["if" <expr>]
    This is a shorthand notation for a type definition plus a value.
    Optionally dependencies for this default value can be added with "if".
  
  - dependencies: "depends on" <expr>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
83
    This defines a dependency for this menu entry. If multiple
83dcde4e1   Jan Engelhardt   kconfig: linguist...
84
    dependencies are defined, they are connected with '&&'. Dependencies
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
    are applied to all other options within this menu entry (which also
    accept an "if" expression), so these two examples are equivalent:
  
  	bool "foo" if BAR
  	default y if BAR
    and
  	depends on BAR
  	bool "foo"
  	default y
  
  - reverse dependencies: "select" <symbol> ["if" <expr>]
    While normal dependencies reduce the upper limit of a symbol (see
    below), reverse dependencies can be used to force a lower limit of
    another symbol. The value of the current menu symbol is used as the
    minimal value <symbol> can be set to. If <symbol> is selected multiple
    times, the limit is set to the largest selection.
    Reverse dependencies can only be used with boolean or tristate
    symbols.
f8a745942   Jarek Poplawski   docs: note about ...
103
    Note:
dfecbec8b   Matthew Wilcox   kconifg: 'select'...
104
105
106
107
108
109
110
111
  	select should be used with care. select will force
  	a symbol to a value without visiting the dependencies.
  	By abusing select you are able to select a symbol FOO even
  	if FOO depends on BAR that is not set.
  	In general use select only for non-visible symbols
  	(no prompts anywhere) and for symbols with no dependencies.
  	That will limit the usefulness but on the other hand avoid
  	the illegal configurations all over.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
112

df835c2e7   Michal Marek   kconfig: Document...
113
114
115
116
117
118
  - limiting menu display: "visible if" <expr>
    This attribute is only applicable to menu blocks, if the condition is
    false, the menu block is not displayed to the user (the symbols
    contained there can still be selected by other symbols, though). It is
    similar to a conditional "prompt" attribude for individual menu
    entries. Default value of "visible" is true.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
119
120
121
122
123
124
125
126
127
128
129
  - numerical ranges: "range" <symbol> <symbol> ["if" <expr>]
    This allows to limit the range of possible input values for int
    and hex symbols. The user can only input a value which is larger than
    or equal to the first symbol and smaller than or equal to the second
    symbol.
  
  - help text: "help" or "---help---"
    This defines a help text. The end of the help text is determined by
    the indentation level, this means it ends at the first line which has
    a smaller indentation than the first line of the help text.
    "---help---" and "help" do not differ in behaviour, "---help---" is
53cb47268   Matt LaPlante   Fix typos in Docu...
130
    used to help visually separate configuration logic from help within
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
131
    the file as an aid to developers.
93449082e   Roman Zippel   kconfig: environm...
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
  - misc options: "option" <symbol>[=<value>]
    Various less common options can be defined via this option syntax,
    which can modify the behaviour of the menu entry and its config
    symbol. These options are currently possible:
  
    - "defconfig_list"
      This declares a list of default entries which can be used when
      looking for the default configuration (which is used when the main
      .config doesn't exists yet.)
  
    - "modules"
      This declares the symbol to be used as the MODULES symbol, which
      enables the third modular state for all config symbols.
  
    - "env"=<value>
      This imports the environment variable into Kconfig. It behaves like
      a default, except that the value comes from the environment, this
      also means that the behaviour when mixing it with normal defaults is
      undefined at this point. The symbol is currently not exported back
      to the build environment (if this is desired, it can be done via
      another symbol).
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
  
  Menu dependencies
  -----------------
  
  Dependencies define the visibility of a menu entry and can also reduce
  the input range of tristate symbols. The tristate logic used in the
  expressions uses one more state than normal boolean logic to express the
  module state. Dependency expressions have the following syntax:
  
  <expr> ::= <symbol>                             (1)
             <symbol> '=' <symbol>                (2)
             <symbol> '!=' <symbol>               (3)
             '(' <expr> ')'                       (4)
             '!' <expr>                           (5)
             <expr> '&&' <expr>                   (6)
             <expr> '||' <expr>                   (7)
  
  Expressions are listed in decreasing order of precedence. 
  
  (1) Convert the symbol into an expression. Boolean and tristate symbols
      are simply converted into the respective expression values. All
      other symbol types result in 'n'.
  (2) If the values of both symbols are equal, it returns 'y',
      otherwise 'n'.
  (3) If the values of both symbols are equal, it returns 'n',
      otherwise 'y'.
  (4) Returns the value of the expression. Used to override precedence.
  (5) Returns the result of (2-/expr/).
  (6) Returns the result of min(/expr/, /expr/).
  (7) Returns the result of max(/expr/, /expr/).
  
  An expression can have a value of 'n', 'm' or 'y' (or 0, 1, 2
4280eae09   Li Zefan   kconfig: some sma...
185
  respectively for calculations). A menu entry becomes visible when its
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
186
  expression evaluates to 'm' or 'y'.
0486bc909   Randy Dunlap   kconfig: add hint...
187
188
189
  There are two types of symbols: constant and non-constant symbols.
  Non-constant symbols are the most common ones and are defined with the
  'config' statement. Non-constant symbols consist entirely of alphanumeric
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
190
191
  characters or underscores.
  Constant symbols are only part of expressions. Constant symbols are
83dcde4e1   Jan Engelhardt   kconfig: linguist...
192
  always surrounded by single or double quotes. Within the quote, any
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
193
194
195
196
197
198
199
200
201
  other character is allowed and the quotes can be escaped using '\'.
  
  Menu structure
  --------------
  
  The position of a menu entry in the tree is determined in two ways. First
  it can be specified explicitly:
  
  menu "Network device support"
bef1f4026   Robert P. J. Day   kconfig: Standard...
202
  	depends on NET
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
  
  config NETDEVICES
  	...
  
  endmenu
  
  All entries within the "menu" ... "endmenu" block become a submenu of
  "Network device support". All subentries inherit the dependencies from
  the menu entry, e.g. this means the dependency "NET" is added to the
  dependency list of the config option NETDEVICES.
  
  The other way to generate the menu structure is done by analyzing the
  dependencies. If a menu entry somehow depends on the previous entry, it
  can be made a submenu of it. First, the previous (parent) symbol must
  be part of the dependency list and then one of these two conditions
  must be true:
  - the child entry must become invisible, if the parent is set to 'n'
  - the child entry must only be visible, if the parent is visible
  
  config MODULES
  	bool "Enable loadable module support"
  
  config MODVERSIONS
  	bool "Set version information on all module symbols"
bef1f4026   Robert P. J. Day   kconfig: Standard...
227
  	depends on MODULES
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
228
229
  
  comment "module support disabled"
bef1f4026   Robert P. J. Day   kconfig: Standard...
230
  	depends on !MODULES
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
  
  MODVERSIONS directly depends on MODULES, this means it's only visible if
  MODULES is different from 'n'. The comment on the other hand is always
  visible when MODULES is visible (the (empty) dependency of MODULES is
  also part of the comment dependencies).
  
  
  Kconfig syntax
  --------------
  
  The configuration file describes a series of menu entries, where every
  line starts with a keyword (except help texts). The following keywords
  end a menu entry:
  - config
  - menuconfig
  - choice/endchoice
  - comment
  - menu/endmenu
  - if/endif
  - source
  The first five also start the definition of a menu entry.
  
  config:
  
  	"config" <symbol>
  	<config options>
  
  This defines a config symbol <symbol> and accepts any of above
  attributes as options.
  
  menuconfig:
  	"menuconfig" <symbol>
  	<config options>
53cb47268   Matt LaPlante   Fix typos in Docu...
264
  This is similar to the simple config entry above, but it also gives a
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
265
266
267
268
  hint to front ends, that all suboptions should be displayed as a
  separate list of options.
  
  choices:
0719e1d23   Yann E. MORIN   Documentation/kbu...
269
  	"choice" [symbol]
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
270
271
272
  	<choice options>
  	<choice block>
  	"endchoice"
83dcde4e1   Jan Engelhardt   kconfig: linguist...
273
  This defines a choice group and accepts any of the above attributes as
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
274
275
276
277
278
279
280
281
  options. A choice can only be of type bool or tristate, while a boolean
  choice only allows a single config entry to be selected, a tristate
  choice also allows any number of config entries to be set to 'm'. This
  can be used if multiple drivers for a single hardware exists and only a
  single driver can be compiled/loaded into the kernel, but all drivers
  can be compiled as modules.
  A choice accepts another option "optional", which allows to set the
  choice to 'n' and no entry needs to be selected.
0719e1d23   Yann E. MORIN   Documentation/kbu...
282
283
284
285
  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.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
  
  comment:
  
  	"comment" <prompt>
  	<comment options>
  
  This defines a comment which is displayed to the user during the
  configuration process and is also echoed to the output files. The only
  possible options are dependencies.
  
  menu:
  
  	"menu" <prompt>
  	<menu options>
  	<menu block>
  	"endmenu"
  
  This defines a menu block, see "Menu structure" above for more
df835c2e7   Michal Marek   kconfig: Document...
304
305
  information. The only possible options are dependencies and "visible"
  attributes.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
  
  if:
  
  	"if" <expr>
  	<if block>
  	"endif"
  
  This defines an if block. The dependency expression <expr> is appended
  to all enclosed menu entries.
  
  source:
  
  	"source" <prompt>
  
  This reads the specified configuration file. This file is always parsed.
6e66b9005   Randy Dunlap   kconfig: update k...
321
322
323
324
325
326
  
  mainmenu:
  
  	"mainmenu" <prompt>
  
  This sets the config program's title bar if the config program chooses
8ea13e2c8   Arnaud Lacombe   kconfig: implemen...
327
328
  to use it. It should be placed at the top of the configuration, before any
  other statement.
0486bc909   Randy Dunlap   kconfig: add hint...
329
330
331
332
333
334
335
  
  
  Kconfig hints
  -------------
  This is a collection of Kconfig tips, most of which aren't obvious at
  first glance and most of which have become idioms in several Kconfig
  files.
9b3e4dad7   Sam Ravnborg   kconfig: document...
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
  Adding common features and make the usage configurable
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  It is a common idiom to implement a feature/functionality that are
  relevant for some architectures but not all.
  The recommended way to do so is to use a config variable named HAVE_*
  that is defined in a common Kconfig file and selected by the relevant
  architectures.
  An example is the generic IOMAP functionality.
  
  We would in lib/Kconfig see:
  
  # Generic IOMAP is used to ...
  config HAVE_GENERIC_IOMAP
  
  config GENERIC_IOMAP
  	depends on HAVE_GENERIC_IOMAP && FOO
  
  And in lib/Makefile we would see:
  obj-$(CONFIG_GENERIC_IOMAP) += iomap.o
  
  For each architecture using the generic IOMAP functionality we would see:
  
  config X86
  	select ...
  	select HAVE_GENERIC_IOMAP
  	select ...
  
  Note: we use the existing config option and avoid creating a new
  config variable to select HAVE_GENERIC_IOMAP.
  
  Note: the use of the internal config variable HAVE_GENERIC_IOMAP, it is
  introduced to overcome the limitation of select which will force a
  config option to 'y' no matter the dependencies.
  The dependencies are moved to the symbol GENERIC_IOMAP and we avoid the
  situation where select forces a symbol equals to 'y'.
0486bc909   Randy Dunlap   kconfig: add hint...
371
372
373
374
375
376
377
378
379
  Build as module only
  ~~~~~~~~~~~~~~~~~~~~
  To restrict a component build to module-only, qualify its config symbol
  with "depends on m".  E.g.:
  
  config FOO
  	depends on BAR && m
  
  limits FOO to module (=m) or disabled (=n).
64b81ed7f   Randy Dunlap   kconfig-language:...
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
  Kconfig symbol existence
  ~~~~~~~~~~~~~~~~~~~~~~~~
  The following two methods produce the same kconfig symbol dependencies
  but differ greatly in kconfig symbol existence (production) in the
  generated config file.
  
  case 1:
  
  config FOO
  	tristate "about foo"
  	depends on BAR
  
  vs. case 2:
  
  if BAR
  config FOO
  	tristate "about foo"
  endif
  
  In case 1, the symbol FOO will always exist in the config file (given
  no other dependencies).  In case 2, the symbol FOO will only exist in
  the config file if BAR is enabled.