xref: /qemu/docs/devel/codebase.rst (revision 100e8e2b383f1afce447274e1feb949166ad9c50)
1========
2Codebase
3========
4
5This section presents the various parts of QEMU and how the codebase is
6organized.
7
8Beyond giving succinct descriptions, the goal is to offer links to various
9parts of the documentation/codebase.
10
11Subsystems
12----------
13
14An exhaustive list of subsystems and associated files can be found in the
15`MAINTAINERS <https://gitlab.com/qemu-project/qemu/-/blob/master/MAINTAINERS>`_
16file.
17
18Some of the main QEMU subsystems are:
19
20- `Accelerators<Accelerators>`
21- Block devices and `disk images<disk images>` support
22- `CI<ci>` and `Tests<testing>`
23- `Devices<device-emulation>` & Board models
24- `Documentation <documentation-root>`
25- `GDB support<GDB usage>`
26- :ref:`Migration<migration>`
27- `Monitor<QEMU monitor>`
28- :ref:`QOM (QEMU Object Model)<qom>`
29- `System mode<System emulation>`
30- :ref:`TCG (Tiny Code Generator)<tcg>`
31- `User mode<user-mode>` (`Linux<linux-user-mode>` & `BSD<bsd-user-mode>`)
32- User Interfaces
33
34More documentation on QEMU subsystems can be found on :ref:`internal-subsystem`
35page.
36
37The Grand tour
38--------------
39
40We present briefly here what every folder in the top directory of the codebase
41contains. Hop on!
42
43The folder name links here will take you to that folder in our gitlab
44repository. Other links will take you to more detailed documentation for that
45subsystem, where we have it. Unfortunately not every subsystem has documentation
46yet, so sometimes the source code is all you have.
47
48* `accel <https://gitlab.com/qemu-project/qemu/-/tree/master/accel>`_:
49  Infrastructure and architecture agnostic code related to the various
50  `accelerators <Accelerators>` supported by QEMU
51  (TCG, KVM, hvf, whpx, xen, nvmm).
52  Contains interfaces for operations that will be implemented per
53  `target <https://gitlab.com/qemu-project/qemu/-/tree/master/target>`_.
54* `audio <https://gitlab.com/qemu-project/qemu/-/tree/master/audio>`_:
55  Audio (host) support.
56* `authz <https://gitlab.com/qemu-project/qemu/-/tree/master/authz>`_:
57  `QEMU Authorization framework<client authorization>`.
58* `backends <https://gitlab.com/qemu-project/qemu/-/tree/master/backends>`_:
59  Various backends that are used to access resources on the host (e.g. for
60  random number generation, memory backing or cryptographic functions).
61* `block <https://gitlab.com/qemu-project/qemu/-/tree/master/block>`_:
62  Block devices and `image formats<disk images>` implementation.
63* `bsd-user <https://gitlab.com/qemu-project/qemu/-/tree/master/bsd-user>`_:
64  `BSD User mode<bsd-user-mode>`.
65* build: Where the code built goes by default. You can tell the QEMU build
66  system to put the built code anywhere else you like.
67* `chardev <https://gitlab.com/qemu-project/qemu/-/tree/master/chardev>`_:
68  Various backends used by char devices.
69* `common-user <https://gitlab.com/qemu-project/qemu/-/tree/master/common-user>`_:
70  User-mode assembly code for dealing with signals occurring during syscalls.
71* `configs <https://gitlab.com/qemu-project/qemu/-/tree/master/configs>`_:
72  Makefiles defining configurations to build QEMU.
73* `contrib <https://gitlab.com/qemu-project/qemu/-/tree/master/contrib>`_:
74  Community contributed devices/plugins/tools.
75* `crypto <https://gitlab.com/qemu-project/qemu/-/tree/master/crypto>`_:
76  Cryptographic algorithms used in QEMU.
77* `disas <https://gitlab.com/qemu-project/qemu/-/tree/master/disas>`_:
78  Disassembly functions used by QEMU target code.
79* `docs <https://gitlab.com/qemu-project/qemu/-/tree/master/docs>`_:
80  QEMU Documentation.
81* `dump <https://gitlab.com/qemu-project/qemu/-/tree/master/dump>`_:
82  Code to dump memory of a running VM.
83* `ebpf <https://gitlab.com/qemu-project/qemu/-/tree/master/ebpf>`_:
84  eBPF program support in QEMU. `virtio-net RSS<ebpf-rss>` uses it.
85* `fpu <https://gitlab.com/qemu-project/qemu/-/tree/master/fpu>`_:
86  Floating-point software emulation.
87* `fsdev <https://gitlab.com/qemu-project/qemu/-/tree/master/fsdev>`_:
88  `VirtFS <https://www.linux-kvm.org/page/VirtFS>`_ support.
89* `gdbstub <https://gitlab.com/qemu-project/qemu/-/tree/master/gdbstub>`_:
90  `GDB <GDB usage>` support.
91* `gdb-xml <https://gitlab.com/qemu-project/qemu/-/tree/master/gdb-xml>`_:
92  Set of XML files describing architectures and used by `gdbstub <GDB usage>`.
93* `host <https://gitlab.com/qemu-project/qemu/-/tree/master/host>`_:
94  Various architecture specific header files (crypto, atomic, memory
95  operations).
96* `linux-headers <https://gitlab.com/qemu-project/qemu/-/tree/master/linux-headers>`_:
97  A subset of headers imported from Linux kernel and used for implementing
98  KVM support and user-mode.
99* `linux-user <https://gitlab.com/qemu-project/qemu/-/tree/master/linux-user>`_:
100  `User mode <user-mode>` implementation. Contains one folder per target
101  architecture.
102* `.gitlab-ci.d <https://gitlab.com/qemu-project/qemu/-/tree/master/.gitlab-ci.d>`_:
103  `CI <ci>` yaml and scripts.
104* `include <https://gitlab.com/qemu-project/qemu/-/tree/master/include>`_:
105  All headers associated to different subsystems in QEMU. The hierarchy used
106  mirrors source code organization and naming.
107* `hw <https://gitlab.com/qemu-project/qemu/-/tree/master/hw>`_:
108  `Devices <device-emulation>` and boards emulation. Devices are categorized by
109  type/protocol/architecture and located in associated subfolder.
110* `io <https://gitlab.com/qemu-project/qemu/-/tree/master/io>`_:
111  QEMU `I/O channels <https://lists.gnu.org/archive/html/qemu-devel/2015-11/msg04208.html>`_.
112* `libdecnumber <https://gitlab.com/qemu-project/qemu/-/tree/master/libdecnumber>`_:
113  Import of gcc library, used to implement decimal number arithmetic.
114* `migration <https://gitlab.com/qemu-project/qemu/-/tree/master/migration>`__:
115  :ref:`Migration framework <migration>`.
116* `monitor <https://gitlab.com/qemu-project/qemu/-/tree/master/monitor>`_:
117  `Monitor <QEMU monitor>` implementation (HMP & QMP).
118* `nbd <https://gitlab.com/qemu-project/qemu/-/tree/master/nbd>`_:
119  QEMU `NBD (Network Block Device) <nbd>` server.
120* `net <https://gitlab.com/qemu-project/qemu/-/tree/master/net>`_:
121  Network (host) support.
122* `pc-bios <https://gitlab.com/qemu-project/qemu/-/tree/master/pc-bios>`_:
123  Contains pre-built firmware binaries and boot images, ready to use in
124  QEMU without compilation.
125* `plugins <https://gitlab.com/qemu-project/qemu/-/tree/master/plugins>`_:
126  :ref:`TCG plugins <tcg-plugins>` core implementation. Plugins can be found in
127  `tests <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/tcg/plugins>`__
128  and `contrib <https://gitlab.com/qemu-project/qemu/-/tree/master/contrib/plugins>`__
129  folders.
130* `po <https://gitlab.com/qemu-project/qemu/-/tree/master/po>`_:
131  Translation files.
132* `python <https://gitlab.com/qemu-project/qemu/-/tree/master/python>`_:
133  Python part of our build/test system.
134* `qapi <https://gitlab.com/qemu-project/qemu/-/tree/master/qapi>`_:
135  `QAPI <qapi>` implementation.
136* `qobject <https://gitlab.com/qemu-project/qemu/-/tree/master/qobject>`_:
137  QEMU Object implementation.
138* `qga <https://gitlab.com/qemu-project/qemu/-/tree/master/qga>`_:
139  QEMU `Guest agent <qemu-ga>` implementation.
140* `qom <https://gitlab.com/qemu-project/qemu/-/tree/master/qom>`_:
141  QEMU :ref:`Object model <qom>` implementation, with monitor associated commands.
142* `replay <https://gitlab.com/qemu-project/qemu/-/tree/master/replay>`_:
143  QEMU :ref:`Record/replay <replay>` implementation.
144* `roms <https://gitlab.com/qemu-project/qemu/-/tree/master/roms>`_:
145  Contains source code for various firmware and ROMs, which can be compiled if
146  custom or updated versions are needed.
147* `rust <https://gitlab.com/qemu-project/qemu/-/tree/master/rust>`_:
148  Rust integration in QEMU. It contains the new interfaces defined and
149  associated devices using it.
150* `scripts <https://gitlab.com/qemu-project/qemu/-/tree/master/scripts>`_:
151  Collection of scripts used in build and test systems, and various
152  tools for QEMU codebase and execution traces.
153* `scsi <https://gitlab.com/qemu-project/qemu/-/tree/master/scsi>`_:
154  Code related to SCSI support, used by SCSI devices.
155* `semihosting <https://gitlab.com/qemu-project/qemu/-/tree/master/semihosting>`_:
156  QEMU `Semihosting <Semihosting>` implementation.
157* `stats <https://gitlab.com/qemu-project/qemu/-/tree/master/stats>`_:
158  `Monitor <QEMU monitor>` stats commands implementation.
159* `storage-daemon <https://gitlab.com/qemu-project/qemu/-/tree/master/storage-daemon>`_:
160  QEMU `Storage daemon <storage-daemon>` implementation.
161* `stubs <https://gitlab.com/qemu-project/qemu/-/tree/master/stubs>`_:
162  Various stubs (empty functions) used to compile QEMU with specific
163  configurations.
164* `subprojects <https://gitlab.com/qemu-project/qemu/-/tree/master/subprojects>`_:
165  QEMU submodules used by QEMU build system.
166* `system <https://gitlab.com/qemu-project/qemu/-/tree/master/system>`_:
167  QEMU `system mode <System emulation>` implementation (cpu, mmu, boot support).
168* `target <https://gitlab.com/qemu-project/qemu/-/tree/master/target>`_:
169  Contains code for all target architectures supported (one subfolder
170  per arch). For every architecture, you can find accelerator specific
171  implementations.
172* `tcg <https://gitlab.com/qemu-project/qemu/-/tree/master/tcg>`_:
173  :ref:`TCG <tcg>` related code.
174  Contains one subfolder per host supported architecture.
175* `tests <https://gitlab.com/qemu-project/qemu/-/tree/master/tests>`_:
176  QEMU `test <testing>` suite
177
178  - `avocado <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/avocado>`_:
179    Functional tests booting full VM using `Avocado framework <checkavocado-ref>`.
180    Those tests will be transformed and moved into
181    `tests/functional <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/functional>`_
182    in the future.
183  - `data <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/data>`_:
184    Data for various tests.
185  - `decode <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/decode>`_:
186    Testsuite for :ref:`decodetree <decodetree>` implementation.
187  - `docker <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/docker>`_:
188    Code and scripts to create `containers <container-ref>` used in `CI <ci>`.
189  - `fp <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/fp>`_:
190    QEMU testsuite for soft float implementation.
191  - `functional <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/functional>`_:
192    `Functional tests <checkfunctional-ref>` (full VM boot).
193  - `lcitool <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/lcitool>`_:
194    Generate dockerfiles for CI containers.
195  - `migration <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/migration>`_:
196    Test scripts and data for :ref:`Migration framework <migration>`.
197  - `multiboot <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/multiboot>`_:
198    Test multiboot functionality for x86_64/i386.
199  - `qapi-schema <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/qapi-schema>`_:
200    Test scripts and data for `QAPI <qapi-tests>`.
201  - `qemu-iotests <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/qemu-iotests>`_:
202    `Disk image and block tests <qemu-iotests>`.
203  - `qtest <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/qtest>`_:
204    `Device emulation testing <qtest>`.
205  - `tcg <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/tcg>`__:
206    `TCG related tests <checktcg-ref>`. Contains code per architecture
207    (subfolder) and multiarch tests as well.
208  - `tsan <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/tsan>`_:
209    `Suppressions <tsan-suppressions>` for thread sanitizer.
210  - `uefi-test-tools <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/uefi-test-tools>`_:
211    Test tool for UEFI support.
212  - `unit <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/unit>`_:
213    QEMU `Unit tests <unit-tests>`.
214* `trace <https://gitlab.com/qemu-project/qemu/-/tree/master/trace>`_:
215  :ref:`Tracing framework <tracing>`. Used to print information associated to various
216  events during execution.
217* `ui <https://gitlab.com/qemu-project/qemu/-/tree/master/ui>`_:
218  QEMU User interfaces.
219* `util <https://gitlab.com/qemu-project/qemu/-/tree/master/util>`_:
220  Utility code used by other parts of QEMU.
221