]>
Commit | Line | Data |
---|---|---|
2eba427e PB |
1 | .. _kconfig: |
2 | ||
576c3f2f PB |
3 | ================ |
4 | QEMU and Kconfig | |
5 | ================ | |
6 | ||
7 | QEMU is a very versatile emulator; it can be built for a variety of | |
8 | targets, where each target can emulate various boards and at the same | |
9 | time different targets can share large amounts of code. For example, | |
10 | a POWER and an x86 board can run the same code to emulate a PCI network | |
11 | card, even though the boards use different PCI host bridges, and they | |
12 | can run the same code to emulate a SCSI disk while using different | |
6fe6d6c9 | 13 | SCSI adapters. Arm, s390 and x86 boards can all present a virtio-blk |
576c3f2f PB |
14 | disk to their guests, but with three different virtio guest interfaces. |
15 | ||
16 | Each QEMU target enables a subset of the boards, devices and buses that | |
17 | are included in QEMU's source code. As a result, each QEMU executable | |
18 | only links a small subset of the files that form QEMU's source code; | |
19 | anything that is not needed to support a particular target is culled. | |
20 | ||
21 | QEMU uses a simple domain-specific language to describe the dependencies | |
22 | between components. This is useful for two reasons: | |
23 | ||
24 | * new targets and boards can be added without knowing in detail the | |
25 | architecture of the hardware emulation subsystems. Boards only have | |
26 | to list the components they need, and the compiled executable will | |
27 | include all the required dependencies and all the devices that the | |
28 | user can add to that board; | |
29 | ||
30 | * users can easily build reduced versions of QEMU that support only a subset | |
31 | of boards or devices. For example, by default most targets will include | |
32 | all emulated PCI devices that QEMU supports, but the build process is | |
33 | configurable and it is easy to drop unnecessary (or otherwise unwanted) | |
34 | code to make a leaner binary. | |
35 | ||
36 | This domain-specific language is based on the Kconfig language that | |
37 | originated in the Linux kernel, though it was heavily simplified and | |
38 | the handling of dependencies is stricter in QEMU. | |
39 | ||
40 | Unlike Linux, there is no user interface to edit the configuration, which | |
41 | is instead specified in per-target files under the ``default-configs/`` | |
42 | directory of the QEMU source tree. This is because, unlike Linux, | |
43 | configuration and dependencies can be treated as a black box when building | |
44 | QEMU; the default configuration that QEMU ships with should be okay in | |
45 | almost all cases. | |
46 | ||
47 | The Kconfig language | |
48 | -------------------- | |
49 | ||
50 | Kconfig defines configurable components in files named ``hw/*/Kconfig``. | |
51 | Note that configurable components are _not_ visible in C code as preprocessor | |
52 | symbols; they are only visible in the Makefile. Each configurable component | |
53 | defines a Makefile variable whose name starts with ``CONFIG_``. | |
54 | ||
55 | All elements have boolean (true/false) type; truth is written as ``y``, while | |
56 | falsehood is written ``n``. They are defined in a Kconfig | |
57 | stanza like the following:: | |
58 | ||
59 | config ARM_VIRT | |
60 | bool | |
61 | imply PCI_DEVICES | |
62 | imply VFIO_AMD_XGBE | |
63 | imply VFIO_XGMAC | |
64 | select A15MPCORE | |
65 | select ACPI | |
66 | select ARM_SMMUV3 | |
67 | ||
68 | The ``config`` keyword introduces a new configuration element. In the example | |
69 | above, Makefiles will have access to a variable named ``CONFIG_ARM_VIRT``, | |
70 | with value ``y`` or ``n`` (respectively for boolean true and false). | |
71 | ||
72 | Boolean expressions can be used within the language, whenever ``<expr>`` | |
73 | is written in the remainder of this section. The ``&&``, ``||`` and | |
74 | ``!`` operators respectively denote conjunction (AND), disjunction (OR) | |
75 | and negation (NOT). | |
76 | ||
77 | The ``bool`` data type declaration is optional, but it is suggested to | |
78 | include it for clarity and future-proofing. After ``bool`` the following | |
79 | directives can be included: | |
80 | ||
81 | **dependencies**: ``depends on <expr>`` | |
82 | ||
83 | This defines a dependency for this configurable element. Dependencies | |
84 | evaluate an expression and force the value of the variable to false | |
85 | if the expression is false. | |
86 | ||
87 | **reverse dependencies**: ``select <symbol> [if <expr>]`` | |
88 | ||
89 | While ``depends on`` can force a symbol to false, reverse dependencies can | |
90 | be used to force another symbol to true. In the following example, | |
91 | ``CONFIG_BAZ`` will be true whenever ``CONFIG_FOO`` is true:: | |
92 | ||
93 | config FOO | |
94 | select BAZ | |
95 | ||
96 | The optional expression will prevent ``select`` from having any effect | |
97 | unless it is true. | |
98 | ||
99 | Note that unlike Linux's Kconfig implementation, QEMU will detect | |
100 | contradictions between ``depends on`` and ``select`` statements and prevent | |
101 | you from building such a configuration. | |
102 | ||
103 | **default value**: ``default <value> [if <expr>]`` | |
104 | ||
105 | Default values are assigned to the config symbol if no other value was | |
106 | set by the user via ``default-configs/*.mak`` files, and only if | |
107 | ``select`` or ``depends on`` directives do not force the value to true | |
108 | or false respectively. ``<value>`` can be ``y`` or ``n``; it cannot | |
109 | be an arbitrary Boolean expression. However, a condition for applying | |
110 | the default value can be added with ``if``. | |
111 | ||
112 | A configuration element can have any number of default values (usually, | |
113 | if more than one default is present, they will have different | |
114 | conditions). If multiple default values satisfy their condition, | |
115 | only the first defined one is active. | |
116 | ||
117 | **reverse default** (weak reverse dependency): ``imply <symbol> [if <expr>]`` | |
118 | ||
119 | This is similar to ``select`` as it applies a lower limit of ``y`` | |
120 | to another symbol. However, the lower limit is only a default | |
121 | and the "implied" symbol's value may still be set to ``n`` from a | |
122 | ``default-configs/*.mak`` files. The following two examples are | |
123 | equivalent:: | |
124 | ||
125 | config FOO | |
126 | bool | |
127 | imply BAZ | |
128 | ||
129 | config BAZ | |
130 | bool | |
131 | default y if FOO | |
132 | ||
133 | The next section explains where to use ``imply`` or ``default y``. | |
134 | ||
135 | Guidelines for writing Kconfig files | |
136 | ------------------------------------ | |
137 | ||
138 | Configurable elements in QEMU fall under five broad groups. Each group | |
139 | declares its dependencies in different ways: | |
140 | ||
141 | **subsystems**, of which **buses** are a special case | |
142 | ||
143 | Example:: | |
144 | ||
145 | config SCSI | |
146 | bool | |
147 | ||
148 | Subsystems always default to false (they have no ``default`` directive) | |
149 | and are never visible in ``default-configs/*.mak`` files. It's | |
150 | up to other symbols to ``select`` whatever subsystems they require. | |
151 | ||
152 | They sometimes have ``select`` directives to bring in other required | |
153 | subsystems or buses. For example, ``AUX`` (the DisplayPort auxiliary | |
154 | channel "bus") selects ``I2C`` because it can act as an I2C master too. | |
155 | ||
156 | **devices** | |
157 | ||
158 | Example:: | |
159 | ||
160 | config MEGASAS_SCSI_PCI | |
161 | bool | |
162 | default y if PCI_DEVICES | |
163 | depends on PCI | |
164 | select SCSI | |
165 | ||
166 | Devices are the most complex of the five. They can have a variety | |
167 | of directives that cooperate so that a default configuration includes | |
168 | all the devices that can be accessed from QEMU. | |
169 | ||
170 | Devices *depend on* the bus that they lie on, for example a PCI | |
171 | device would specify ``depends on PCI``. An MMIO device will likely | |
172 | have no ``depends on`` directive. Devices also *select* the buses | |
173 | that the device provides, for example a SCSI adapter would specify | |
174 | ``select SCSI``. Finally, devices are usually ``default y`` if and | |
175 | only if they have at least one ``depends on``; the default could be | |
176 | conditional on a device group. | |
177 | ||
178 | Devices also select any optional subsystem that they use; for example | |
179 | a video card might specify ``select EDID`` if it needs to build EDID | |
180 | information and publish it to the guest. | |
181 | ||
182 | **device groups** | |
183 | ||
184 | Example:: | |
185 | ||
186 | config PCI_DEVICES | |
187 | bool | |
188 | ||
189 | Device groups provide a convenient mechanism to enable/disable many | |
190 | devices in one go. This is useful when a set of devices is likely to | |
191 | be enabled/disabled by several targets. Device groups usually need | |
192 | no directive and are not used in the Makefile either; they only appear | |
193 | as conditions for ``default y`` directives. | |
194 | ||
195 | QEMU currently has two device groups, ``PCI_DEVICES`` and | |
196 | ``TEST_DEVICES``. PCI devices usually have a ``default y if | |
197 | PCI_DEVICES`` directive rather than just ``default y``. This lets | |
198 | some boards (notably s390) easily support a subset of PCI devices, | |
199 | for example only VFIO (passthrough) and virtio-pci devices. | |
200 | ``TEST_DEVICES`` instead is used for devices that are rarely used on | |
201 | production virtual machines, but provide useful hooks to test QEMU | |
202 | or KVM. | |
203 | ||
204 | **boards** | |
205 | ||
206 | Example:: | |
207 | ||
208 | config SUN4M | |
209 | bool | |
210 | imply TCX | |
211 | imply CG3 | |
212 | select CS4231 | |
213 | select ECCMEMCTL | |
214 | select EMPTY_SLOT | |
215 | select ESCC | |
216 | select ESP | |
217 | select FDC | |
218 | select SLAVIO | |
219 | select LANCE | |
220 | select M48T59 | |
221 | select STP2000 | |
222 | ||
223 | Boards specify their constituent devices using ``imply`` and ``select`` | |
224 | directives. A device should be listed under ``select`` if the board | |
225 | cannot be started at all without it. It should be listed under | |
226 | ``imply`` if (depending on the QEMU command line) the board may or | |
227 | may not be started without it. Boards also default to false; they are | |
228 | enabled by the ``default-configs/*.mak`` for the target they apply to. | |
229 | ||
230 | **internal elements** | |
231 | ||
232 | Example:: | |
233 | ||
234 | config ECCMEMCTL | |
235 | bool | |
236 | select ECC | |
237 | ||
238 | Internal elements group code that is useful in several boards or | |
239 | devices. They are usually enabled with ``select`` and in turn select | |
240 | other elements; they are never visible in ``default-configs/*.mak`` | |
241 | files, and often not even in the Makefile. | |
242 | ||
243 | Writing and modifying default configurations | |
244 | -------------------------------------------- | |
245 | ||
246 | In addition to the Kconfig files under hw/, each target also includes | |
247 | a file called ``default-configs/TARGETNAME-softmmu.mak``. These files | |
248 | initialize some Kconfig variables to non-default values and provide the | |
249 | starting point to turn on devices and subsystems. | |
250 | ||
251 | A file in ``default-configs/`` looks like the following example:: | |
252 | ||
253 | # Default configuration for alpha-softmmu | |
254 | ||
255 | # Uncomment the following lines to disable these optional devices: | |
256 | # | |
257 | #CONFIG_PCI_DEVICES=n | |
258 | #CONFIG_TEST_DEVICES=n | |
259 | ||
260 | # Boards: | |
261 | # | |
262 | CONFIG_DP264=y | |
263 | ||
264 | The first part, consisting of commented-out ``=n`` assignments, tells | |
265 | the user which devices or device groups are implied by the boards. | |
266 | The second part, consisting of ``=y`` assignments, tells the user which | |
267 | boards are supported by the target. The user will typically modify | |
268 | the default configuration by uncommenting lines in the first group, | |
269 | or commenting out lines in the second group. | |
270 | ||
271 | It is also possible to run QEMU's configure script with the | |
6baabe5c | 272 | ``--without-default-devices`` option. When this is done, everything defaults |
576c3f2f PB |
273 | to ``n`` unless it is ``select``ed or explicitly switched on in the |
274 | ``.mak`` files. In other words, ``default`` and ``imply`` directives | |
275 | are disabled. When QEMU is built with this option, the user will probably | |
276 | want to change some lines in the first group, for example like this:: | |
277 | ||
278 | CONFIG_PCI_DEVICES=y | |
279 | #CONFIG_TEST_DEVICES=n | |
280 | ||
281 | and/or pick a subset of the devices in those device groups. Right now | |
282 | there is no single place that lists all the optional devices for | |
283 | ``CONFIG_PCI_DEVICES`` and ``CONFIG_TEST_DEVICES``. In the future, | |
284 | we expect that ``.mak`` files will be automatically generated, so that | |
285 | they will include all these symbols and some help text on what they do. | |
286 | ||
287 | ``Kconfig.host`` | |
288 | ---------------- | |
289 | ||
290 | In some special cases, a configurable element depends on host features | |
291 | that are detected by QEMU's configure script; for example some devices | |
292 | depend on the availability of KVM or on the presence of a library on | |
293 | the host. | |
294 | ||
295 | These symbols should be listed in ``Kconfig.host`` like this:: | |
296 | ||
297 | config KVM | |
298 | bool | |
299 | ||
300 | and also listed as follows in the top-level Makefile's ``MINIKCONF_ARGS`` | |
301 | variable:: | |
302 | ||
303 | MINIKCONF_ARGS = \ | |
bb768f71 | 304 | $@ $*/config-devices.mak.d $< $(MINIKCONF_INPUTS) \ |
576c3f2f PB |
305 | CONFIG_KVM=$(CONFIG_KVM) \ |
306 | CONFIG_SPICE=$(CONFIG_SPICE) \ | |
307 | CONFIG_TPM=$(CONFIG_TPM) \ | |
308 | ... |