-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathKconfig.L4
314 lines (247 loc) · 8.7 KB
/
Kconfig.L4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
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
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
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
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
config UVMM_SUPPORTED
def_bool BUILD_ARCH_arm64 || BUILD_ARCH_arm || BUILD_ARCH_amd64 || BUILD_ARCH_mips || BUILD_ARCH_riscv
comment "uvmm is not supported on this architecture"
depends on !UVMM_SUPPORTED
comment "uvmm requires L4Re libgcc instead of toolchain version"
depends on UVMM_SUPPORTED && COMPILER_RT_USE_TOOLCHAIN_LIBGCC
menu "uvmm virtual machine monitor"
depends on UVMM_SUPPORTED
depends on !COMPILER_RT_USE_TOOLCHAIN_LIBGCC
config UVMM_MONITOR
bool "Monitor interface"
depends on !RELEASE_MODE
default y
help
Enables the monitoring interface that can be used to query and manipulate
the guest state at runtime. When enabled the interface must also be switched
on at runtime using the `mon` command line option.
menu "Supported Loaders"
config UVMM_LOADER_RAW
bool "RAW images"
default y
help
Allows to raw kernel images from an address. The format for the file name
is 'raw:addr=0xcaffee:filename' where addr is the address the image should
be loaded to, relative to the guest ram base.
config UVMM_LOADER_ELF
bool "ELF images"
default y
help
Enable loading of elf images. The file found under the file name passed to
uvmm must be a valid ELF file for the loader to pick it up.
config UVMM_LOADER_PE
bool "PE images (error handling only)"
default y
help
Print usefull errors when trying to load PE images. If the file found under
the file name passed to uvmm is a PE file uvmm will not load it but provides
helpful error messages.
config UVMM_LOADER_ROM
bool "ROM images (from guest memory locations)"
default y
help
Enable loading of images from a guest memory location. The format for the
kernel file name passed to uvmm is 'rom:addr=0xcaffee' where 0xcaffee is
a valid address in the memory of the guest. If the format is
'rom:addr=0xcaffee:64bit' then the guest is a 64 bit guest.
config UVMM_LOADER_LINUX
bool "Linux images (non-elf)"
depends on BUILD_ARCH_arm64 || BUILD_ARCH_arm || BUILD_ARCH_amd64 || BUILD_ARCH_riscv
default y
help
Loads a Linux image.
config UVMM_LOADER_GZIP
bool "GZIP/ZLIB loading for Linux images"
depends on (BUILD_ARCH_arm64 || BUILD_ARCH_arm || BUILD_ARCH_riscv) && HAVE_BIDPC_ZLIB && UVMM_LOADER_LINUX
default y
help
Allows to load gzip or zlib compressed kernel images.
endmenu
comment "GZIP/ZLIB compression not available due to missing zlib package"
depends on !HAVE_BIDPC_ZLIB
config UVMM_QEMU_FW_IF
bool "Qemu firmware configuration device"
default y
help
The device allows guests to gain access to the configuration of the
hypervisor or any kind of data like boot/kernel images in a defined way.
Some bootloaders make use of this to setup the platform and start the guest
OS.
For details on the configuration see device/qemu_fw_cfg.cc.
config UVMM_FAULT_INJECT
bool "Fault injection"
depends on BUILD_ARCH_arm64 || BUILD_ARCH_arm
comment "Interfacing with L4 applications or physical hardware"
config UVMM_VDEV_PSCI
bool "PSCI interface support"
depends on BUILD_ARCH_arm || BUILD_ARCH_arm64
default y
help
Emulates a PSCI interface for the guest.
config UVMM_PCI_SUPPORT
bool "Support PCI emulation" if BUILD_ARCH_arm64 || BUILD_ARCH_arm
default y
help
Configures if the PCI subsystem (and the corresponding devices using the
PCI transport) should be available in uvmm.
config UVMM_VDEV_OPTEE
bool "OPTEE SMC call forwarding"
depends on BUILD_ARCH_arm || BUILD_ARCH_arm64
default y
help
Allows forwarding of OP-TEE SMC calls either to a running OP-TEE instance
or to a native L4 application implementing the protocol.
For details on the configuration see device/optee.cc.
config UVMM_VDEV_VIRQ
bool "Forward L4 interrupts"
default y
help
Add a device for relaying L4 IRQs into the guest.
For details on the configuration see device/virq.cc
config UVMM_VDEV_MMIO_PROXY
bool "Proxy dataspaces and MMIO protocol"
default y
help
Emulate a device that proxies memory accesses to an external dataspace or
MMIO space.
For details on the configuration see device/mmio_proxy.cc
config UVMM_VDEV_SYSCTL
bool "System control device"
default y
help
Mmio-based device for triggering system events (shutdown, reboot).
The device can be used with the generic syscon device from Linux.
For details on the configuration see device/sysctl.cc
config UVMM_VDEV_ROM
bool "Read-only dataspace based devices"
default y
help
A device for adding L4 dataspaces read-only to the guest.
For details on the configuration see device/rom.cc
config UVMM_EXTERNAL_RTC
bool "l4rtc time source"
depends on HAVE_BIDPC_RTC
default y
help
A driver to retrieve wallclock time from an L4Re rtc server.
For details on the configuration see device/l4rtc.cc
comment "l4rtc time source not available due to missing rtc package"
depends on !HAVE_BIDPC_RTC
comment "Device Emulation"
config UVMM_VDEV_8250
bool "8250-compatible UART"
default y
help
Emulate an 8250 compatible UART for the guest.
For details on the configuration see device/uart_8250.cc
config UVMM_VDEV_PL011
bool "PL011 UART"
default y
help
Emulate a PrimeCell pl011-compatible UART for the guest.
For details on the configuration see device/pl011.cc
config UVMM_VDEV_PL031
bool "PL031 RTC"
default y
depends on BUILD_ARCH_arm64 || BUILD_ARCH_arm
help
Emluate a simple PL0311 RTC for the guest. This is not a complete device
model and does not come with write support.
For details on the configuration see device/arm/pl031.cc
config UVMM_VDEV_DEVICE_PCI_HOST_ECAM_GENERIC
bool "ECAM PCIe host bridge support"
default y
depends on (BUILD_ARCH_arm || BUILD_ARCH_arm64) && UVMM_PCI_SUPPORT
help
Emulates a generic PCIe host bridge for ARM platforms.
config UVMM_VDEV_DEVICE_FRAMEBUFFER
bool "Generic framebuffer device"
default y
help
Emulate a simple generic framebuffer device
config UVMM_VDEV_CFI_FLASH
bool "CFI flash device"
default y
help
Emulate a simple CFI compliant flash device with the Intel command set.
For details on the configuration see device/cfi.cc
config UVMM_VDEV_ISA_DEBUG_PORT
bool "Bochs debug port"
default y
depends on BUILD_ARCH_amd64
help
Emulate the BOCHS debug IO-port (0x402) to enable guests to print on the
vcon device.
For details on the configuration see ARCH-amd64/isa_debugport.cc
config UVMM_VDEV_BCM2835_MBOX
bool "Support for external bcm2835 mailbox service"
depends on BUILD_ARCH_arm || BUILD_ARCH_arm64
help
Emulate the bcm2835 mailbox device as found on Raspberry Pi 4.
config UVMM_VDEV_GIC_V2
def_bool UVMM_VDEV_SEL_GIC_V2 || UVMM_VDEV_SEL_GIC_BOTH
config UVMM_VDEV_GIC_V3
def_bool UVMM_VDEV_SEL_GIC_V3 || UVMM_VDEV_SEL_GIC_BOTH
choice
prompt "GIC Support"
depends on BUILD_ARCH_arm || BUILD_ARCH_arm64
help
Select which GIC emulations uvmm should support for the virtual interrupt
controller.
config UVMM_VDEV_SEL_GIC_BOTH
bool "GICv2 + GICv3"
config UVMM_VDEV_SEL_GIC_V2
bool "GICv2"
config UVMM_VDEV_SEL_GIC_V3
bool "GICv3"
endchoice
config UVMM_VDEV_GIC_ITS
bool "Emulate ITS in GICv3 to support MSIs"
depends on UVMM_VDEV_GIC_V3
default y
config UVMM_IRQ_DIRECT_INJECT
bool "Utilize direct guest vIRQ injection"
depends on BUILD_ARCH_arm || BUILD_ARCH_arm64
default y
help
On Arm platforms, the kernel optionally supports forwarding hardware
interrupts directly to a guest. This reduces the interrupt latency
but the "pending" and "active" bits in the virtual distributor are
not updated any more. This usually does not pose any problem, though.
It is safe to enable the feature in uvmm even if the kernel does not
support it. Uvmm will transparently fall back to regular, IPC based
interrupt forwarding.
menuconfig UVMM_VDEV_VIRTIO
bool "Virtio driver/device support"
default y
if UVMM_VDEV_VIRTIO
config UVMM_VDEV_VIRTIO_CONSOLE
bool "Support forwarding vcon as virtio-console to the guest"
default y
config UVMM_VDEV_VIRTIO_POWER
bool "Virtio-input based power events"
default y
help
Support sending power events via Virtio-input.
config UVMM_VDEV_VIRTIO_INPUT
bool "Forward L4Re::Events via Virtio-input"
default y
help
Support forwarding input device events via Virtio-input.
config UVMM_VDEV_VIRTIO_PROXY
bool "Support forwarding L4virtio devices to the guest"
default y
help
Support forwarding L4Re virtio devices to the guest. This enables
guests to use L4Re drivers e.g., block devices or virtual network
bridges.
If unsure, say Y.
config UVMM_VDEV_DEVICE_PROXY
bool "Virtio device proxy"
default y
help
Proxy for virtio devices implemented in the guest. Can be used to export
devices driven by a guest using the virtio protocol.
For details on the configuration see device/virtio_device_proxy.cc
endif
endmenu