xref: /qemu/docs/devel/codebase.rst (revision 82707dd4f07613eed8d639956a43bddffca5cd5c)
17f631442SPierrick Bouvier========
27f631442SPierrick BouvierCodebase
37f631442SPierrick Bouvier========
47f631442SPierrick Bouvier
57f631442SPierrick BouvierThis section presents the various parts of QEMU and how the codebase is
67f631442SPierrick Bouvierorganized.
77f631442SPierrick Bouvier
822e6d702SStefan Weil viaBeyond giving succinct descriptions, the goal is to offer links to various
97f631442SPierrick Bouvierparts of the documentation/codebase.
107f631442SPierrick Bouvier
117f631442SPierrick BouvierSubsystems
127f631442SPierrick Bouvier----------
137f631442SPierrick Bouvier
147f631442SPierrick BouvierAn exhaustive list of subsystems and associated files can be found in the
157f631442SPierrick Bouvier`MAINTAINERS <https://gitlab.com/qemu-project/qemu/-/blob/master/MAINTAINERS>`_
167f631442SPierrick Bouvierfile.
177f631442SPierrick Bouvier
187f631442SPierrick BouvierSome of the main QEMU subsystems are:
197f631442SPierrick Bouvier
207f631442SPierrick Bouvier- `Accelerators<Accelerators>`
217f631442SPierrick Bouvier- Block devices and `disk images<disk images>` support
227f631442SPierrick Bouvier- `CI<ci>` and `Tests<testing>`
237f631442SPierrick Bouvier- `Devices<device-emulation>` & Board models
247f631442SPierrick Bouvier- `Documentation <documentation-root>`
257f631442SPierrick Bouvier- `GDB support<GDB usage>`
2630ab96cfSJohn Snow- :ref:`Migration<migration>`
277f631442SPierrick Bouvier- `Monitor<QEMU monitor>`
287f631442SPierrick Bouvier- :ref:`QOM (QEMU Object Model)<qom>`
297f631442SPierrick Bouvier- `System mode<System emulation>`
307f631442SPierrick Bouvier- :ref:`TCG (Tiny Code Generator)<tcg>`
317f631442SPierrick Bouvier- `User mode<user-mode>` (`Linux<linux-user-mode>` & `BSD<bsd-user-mode>`)
327f631442SPierrick Bouvier- User Interfaces
337f631442SPierrick Bouvier
347f631442SPierrick BouvierMore documentation on QEMU subsystems can be found on :ref:`internal-subsystem`
357f631442SPierrick Bouvierpage.
367f631442SPierrick Bouvier
377f631442SPierrick BouvierThe Grand tour
387f631442SPierrick Bouvier--------------
397f631442SPierrick Bouvier
407f631442SPierrick BouvierWe present briefly here what every folder in the top directory of the codebase
417f631442SPierrick Bouviercontains. Hop on!
427f631442SPierrick Bouvier
437f631442SPierrick BouvierThe folder name links here will take you to that folder in our gitlab
447f631442SPierrick Bouvierrepository. Other links will take you to more detailed documentation for that
457f631442SPierrick Bouviersubsystem, where we have it. Unfortunately not every subsystem has documentation
467f631442SPierrick Bouvieryet, so sometimes the source code is all you have.
477f631442SPierrick Bouvier
487f631442SPierrick Bouvier* `accel <https://gitlab.com/qemu-project/qemu/-/tree/master/accel>`_:
497f631442SPierrick Bouvier  Infrastructure and architecture agnostic code related to the various
507f631442SPierrick Bouvier  `accelerators <Accelerators>` supported by QEMU
517f631442SPierrick Bouvier  (TCG, KVM, hvf, whpx, xen, nvmm).
527f631442SPierrick Bouvier  Contains interfaces for operations that will be implemented per
537f631442SPierrick Bouvier  `target <https://gitlab.com/qemu-project/qemu/-/tree/master/target>`_.
547f631442SPierrick Bouvier* `audio <https://gitlab.com/qemu-project/qemu/-/tree/master/audio>`_:
557f631442SPierrick Bouvier  Audio (host) support.
567f631442SPierrick Bouvier* `authz <https://gitlab.com/qemu-project/qemu/-/tree/master/authz>`_:
577f631442SPierrick Bouvier  `QEMU Authorization framework<client authorization>`.
587f631442SPierrick Bouvier* `backends <https://gitlab.com/qemu-project/qemu/-/tree/master/backends>`_:
597f631442SPierrick Bouvier  Various backends that are used to access resources on the host (e.g. for
607f631442SPierrick Bouvier  random number generation, memory backing or cryptographic functions).
617f631442SPierrick Bouvier* `block <https://gitlab.com/qemu-project/qemu/-/tree/master/block>`_:
627f631442SPierrick Bouvier  Block devices and `image formats<disk images>` implementation.
637f631442SPierrick Bouvier* `bsd-user <https://gitlab.com/qemu-project/qemu/-/tree/master/bsd-user>`_:
647f631442SPierrick Bouvier  `BSD User mode<bsd-user-mode>`.
657f631442SPierrick Bouvier* build: Where the code built goes by default. You can tell the QEMU build
667f631442SPierrick Bouvier  system to put the built code anywhere else you like.
677f631442SPierrick Bouvier* `chardev <https://gitlab.com/qemu-project/qemu/-/tree/master/chardev>`_:
687f631442SPierrick Bouvier  Various backends used by char devices.
697f631442SPierrick Bouvier* `common-user <https://gitlab.com/qemu-project/qemu/-/tree/master/common-user>`_:
7022e6d702SStefan Weil via  User-mode assembly code for dealing with signals occurring during syscalls.
717f631442SPierrick Bouvier* `configs <https://gitlab.com/qemu-project/qemu/-/tree/master/configs>`_:
727f631442SPierrick Bouvier  Makefiles defining configurations to build QEMU.
737f631442SPierrick Bouvier* `contrib <https://gitlab.com/qemu-project/qemu/-/tree/master/contrib>`_:
747f631442SPierrick Bouvier  Community contributed devices/plugins/tools.
757f631442SPierrick Bouvier* `crypto <https://gitlab.com/qemu-project/qemu/-/tree/master/crypto>`_:
767f631442SPierrick Bouvier  Cryptographic algorithms used in QEMU.
777f631442SPierrick Bouvier* `disas <https://gitlab.com/qemu-project/qemu/-/tree/master/disas>`_:
787f631442SPierrick Bouvier  Disassembly functions used by QEMU target code.
797f631442SPierrick Bouvier* `docs <https://gitlab.com/qemu-project/qemu/-/tree/master/docs>`_:
807f631442SPierrick Bouvier  QEMU Documentation.
817f631442SPierrick Bouvier* `dump <https://gitlab.com/qemu-project/qemu/-/tree/master/dump>`_:
827f631442SPierrick Bouvier  Code to dump memory of a running VM.
837f631442SPierrick Bouvier* `ebpf <https://gitlab.com/qemu-project/qemu/-/tree/master/ebpf>`_:
847f631442SPierrick Bouvier  eBPF program support in QEMU. `virtio-net RSS<ebpf-rss>` uses it.
857f631442SPierrick Bouvier* `fpu <https://gitlab.com/qemu-project/qemu/-/tree/master/fpu>`_:
867f631442SPierrick Bouvier  Floating-point software emulation.
877f631442SPierrick Bouvier* `fsdev <https://gitlab.com/qemu-project/qemu/-/tree/master/fsdev>`_:
887f631442SPierrick Bouvier  `VirtFS <https://www.linux-kvm.org/page/VirtFS>`_ support.
897f631442SPierrick Bouvier* `gdbstub <https://gitlab.com/qemu-project/qemu/-/tree/master/gdbstub>`_:
907f631442SPierrick Bouvier  `GDB <GDB usage>` support.
917f631442SPierrick Bouvier* `gdb-xml <https://gitlab.com/qemu-project/qemu/-/tree/master/gdb-xml>`_:
927f631442SPierrick Bouvier  Set of XML files describing architectures and used by `gdbstub <GDB usage>`.
937f631442SPierrick Bouvier* `host <https://gitlab.com/qemu-project/qemu/-/tree/master/host>`_:
947f631442SPierrick Bouvier  Various architecture specific header files (crypto, atomic, memory
957f631442SPierrick Bouvier  operations).
967f631442SPierrick Bouvier* `linux-headers <https://gitlab.com/qemu-project/qemu/-/tree/master/linux-headers>`_:
977f631442SPierrick Bouvier  A subset of headers imported from Linux kernel and used for implementing
987f631442SPierrick Bouvier  KVM support and user-mode.
997f631442SPierrick Bouvier* `linux-user <https://gitlab.com/qemu-project/qemu/-/tree/master/linux-user>`_:
1007f631442SPierrick Bouvier  `User mode <user-mode>` implementation. Contains one folder per target
1017f631442SPierrick Bouvier  architecture.
1027f631442SPierrick Bouvier* `.gitlab-ci.d <https://gitlab.com/qemu-project/qemu/-/tree/master/.gitlab-ci.d>`_:
1037f631442SPierrick Bouvier  `CI <ci>` yaml and scripts.
1047f631442SPierrick Bouvier* `include <https://gitlab.com/qemu-project/qemu/-/tree/master/include>`_:
10522e6d702SStefan Weil via  All headers associated to different subsystems in QEMU. The hierarchy used
1067f631442SPierrick Bouvier  mirrors source code organization and naming.
1077f631442SPierrick Bouvier* `hw <https://gitlab.com/qemu-project/qemu/-/tree/master/hw>`_:
1087f631442SPierrick Bouvier  `Devices <device-emulation>` and boards emulation. Devices are categorized by
1097f631442SPierrick Bouvier  type/protocol/architecture and located in associated subfolder.
1107f631442SPierrick Bouvier* `io <https://gitlab.com/qemu-project/qemu/-/tree/master/io>`_:
1117f631442SPierrick Bouvier  QEMU `I/O channels <https://lists.gnu.org/archive/html/qemu-devel/2015-11/msg04208.html>`_.
1127f631442SPierrick Bouvier* `libdecnumber <https://gitlab.com/qemu-project/qemu/-/tree/master/libdecnumber>`_:
1137f631442SPierrick Bouvier  Import of gcc library, used to implement decimal number arithmetic.
1147f631442SPierrick Bouvier* `migration <https://gitlab.com/qemu-project/qemu/-/tree/master/migration>`__:
11530ab96cfSJohn Snow  :ref:`Migration framework <migration>`.
1167f631442SPierrick Bouvier* `monitor <https://gitlab.com/qemu-project/qemu/-/tree/master/monitor>`_:
1177f631442SPierrick Bouvier  `Monitor <QEMU monitor>` implementation (HMP & QMP).
1187f631442SPierrick Bouvier* `nbd <https://gitlab.com/qemu-project/qemu/-/tree/master/nbd>`_:
119*82707dd4SPeter Maydell  QEMU NBD (Network Block Device) server.
1207f631442SPierrick Bouvier* `net <https://gitlab.com/qemu-project/qemu/-/tree/master/net>`_:
1217f631442SPierrick Bouvier  Network (host) support.
1227f631442SPierrick Bouvier* `pc-bios <https://gitlab.com/qemu-project/qemu/-/tree/master/pc-bios>`_:
1237f631442SPierrick Bouvier  Contains pre-built firmware binaries and boot images, ready to use in
1247f631442SPierrick Bouvier  QEMU without compilation.
1257f631442SPierrick Bouvier* `plugins <https://gitlab.com/qemu-project/qemu/-/tree/master/plugins>`_:
1267f631442SPierrick Bouvier  :ref:`TCG plugins <tcg-plugins>` core implementation. Plugins can be found in
1277f631442SPierrick Bouvier  `tests <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/tcg/plugins>`__
1287f631442SPierrick Bouvier  and `contrib <https://gitlab.com/qemu-project/qemu/-/tree/master/contrib/plugins>`__
1297f631442SPierrick Bouvier  folders.
1307f631442SPierrick Bouvier* `po <https://gitlab.com/qemu-project/qemu/-/tree/master/po>`_:
1317f631442SPierrick Bouvier  Translation files.
1327f631442SPierrick Bouvier* `python <https://gitlab.com/qemu-project/qemu/-/tree/master/python>`_:
1337f631442SPierrick Bouvier  Python part of our build/test system.
1347f631442SPierrick Bouvier* `qapi <https://gitlab.com/qemu-project/qemu/-/tree/master/qapi>`_:
1357f631442SPierrick Bouvier  `QAPI <qapi>` implementation.
1367f631442SPierrick Bouvier* `qobject <https://gitlab.com/qemu-project/qemu/-/tree/master/qobject>`_:
1377f631442SPierrick Bouvier  QEMU Object implementation.
1387f631442SPierrick Bouvier* `qga <https://gitlab.com/qemu-project/qemu/-/tree/master/qga>`_:
1397f631442SPierrick Bouvier  QEMU `Guest agent <qemu-ga>` implementation.
1407f631442SPierrick Bouvier* `qom <https://gitlab.com/qemu-project/qemu/-/tree/master/qom>`_:
1417f631442SPierrick Bouvier  QEMU :ref:`Object model <qom>` implementation, with monitor associated commands.
1427f631442SPierrick Bouvier* `replay <https://gitlab.com/qemu-project/qemu/-/tree/master/replay>`_:
1437f631442SPierrick Bouvier  QEMU :ref:`Record/replay <replay>` implementation.
1447f631442SPierrick Bouvier* `roms <https://gitlab.com/qemu-project/qemu/-/tree/master/roms>`_:
1457f631442SPierrick Bouvier  Contains source code for various firmware and ROMs, which can be compiled if
1467f631442SPierrick Bouvier  custom or updated versions are needed.
1477f631442SPierrick Bouvier* `rust <https://gitlab.com/qemu-project/qemu/-/tree/master/rust>`_:
1487f631442SPierrick Bouvier  Rust integration in QEMU. It contains the new interfaces defined and
1497f631442SPierrick Bouvier  associated devices using it.
1507f631442SPierrick Bouvier* `scripts <https://gitlab.com/qemu-project/qemu/-/tree/master/scripts>`_:
1517f631442SPierrick Bouvier  Collection of scripts used in build and test systems, and various
1527f631442SPierrick Bouvier  tools for QEMU codebase and execution traces.
1537f631442SPierrick Bouvier* `scsi <https://gitlab.com/qemu-project/qemu/-/tree/master/scsi>`_:
1547f631442SPierrick Bouvier  Code related to SCSI support, used by SCSI devices.
1557f631442SPierrick Bouvier* `semihosting <https://gitlab.com/qemu-project/qemu/-/tree/master/semihosting>`_:
1567f631442SPierrick Bouvier  QEMU `Semihosting <Semihosting>` implementation.
1577f631442SPierrick Bouvier* `stats <https://gitlab.com/qemu-project/qemu/-/tree/master/stats>`_:
1587f631442SPierrick Bouvier  `Monitor <QEMU monitor>` stats commands implementation.
1597f631442SPierrick Bouvier* `storage-daemon <https://gitlab.com/qemu-project/qemu/-/tree/master/storage-daemon>`_:
1607f631442SPierrick Bouvier  QEMU `Storage daemon <storage-daemon>` implementation.
1617f631442SPierrick Bouvier* `stubs <https://gitlab.com/qemu-project/qemu/-/tree/master/stubs>`_:
1627f631442SPierrick Bouvier  Various stubs (empty functions) used to compile QEMU with specific
1637f631442SPierrick Bouvier  configurations.
1647f631442SPierrick Bouvier* `subprojects <https://gitlab.com/qemu-project/qemu/-/tree/master/subprojects>`_:
1657f631442SPierrick Bouvier  QEMU submodules used by QEMU build system.
1667f631442SPierrick Bouvier* `system <https://gitlab.com/qemu-project/qemu/-/tree/master/system>`_:
1677f631442SPierrick Bouvier  QEMU `system mode <System emulation>` implementation (cpu, mmu, boot support).
1687f631442SPierrick Bouvier* `target <https://gitlab.com/qemu-project/qemu/-/tree/master/target>`_:
1697f631442SPierrick Bouvier  Contains code for all target architectures supported (one subfolder
1707f631442SPierrick Bouvier  per arch). For every architecture, you can find accelerator specific
1717f631442SPierrick Bouvier  implementations.
1727f631442SPierrick Bouvier* `tcg <https://gitlab.com/qemu-project/qemu/-/tree/master/tcg>`_:
1737f631442SPierrick Bouvier  :ref:`TCG <tcg>` related code.
1747f631442SPierrick Bouvier  Contains one subfolder per host supported architecture.
1757f631442SPierrick Bouvier* `tests <https://gitlab.com/qemu-project/qemu/-/tree/master/tests>`_:
1767f631442SPierrick Bouvier  QEMU `test <testing>` suite
1777f631442SPierrick Bouvier
1787f631442SPierrick Bouvier  - `data <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/data>`_:
1797f631442SPierrick Bouvier    Data for various tests.
1807f631442SPierrick Bouvier  - `decode <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/decode>`_:
1817f631442SPierrick Bouvier    Testsuite for :ref:`decodetree <decodetree>` implementation.
1827f631442SPierrick Bouvier  - `docker <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/docker>`_:
1837f631442SPierrick Bouvier    Code and scripts to create `containers <container-ref>` used in `CI <ci>`.
1847f631442SPierrick Bouvier  - `fp <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/fp>`_:
1857f631442SPierrick Bouvier    QEMU testsuite for soft float implementation.
1867f631442SPierrick Bouvier  - `functional <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/functional>`_:
1877f631442SPierrick Bouvier    `Functional tests <checkfunctional-ref>` (full VM boot).
1887f631442SPierrick Bouvier  - `lcitool <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/lcitool>`_:
1897f631442SPierrick Bouvier    Generate dockerfiles for CI containers.
1907f631442SPierrick Bouvier  - `migration <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/migration>`_:
19130ab96cfSJohn Snow    Test scripts and data for :ref:`Migration framework <migration>`.
1927f631442SPierrick Bouvier  - `multiboot <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/multiboot>`_:
1937f631442SPierrick Bouvier    Test multiboot functionality for x86_64/i386.
1947f631442SPierrick Bouvier  - `qapi-schema <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/qapi-schema>`_:
1957f631442SPierrick Bouvier    Test scripts and data for `QAPI <qapi-tests>`.
1967f631442SPierrick Bouvier  - `qemu-iotests <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/qemu-iotests>`_:
1977f631442SPierrick Bouvier    `Disk image and block tests <qemu-iotests>`.
1987f631442SPierrick Bouvier  - `qtest <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/qtest>`_:
1997f631442SPierrick Bouvier    `Device emulation testing <qtest>`.
2007f631442SPierrick Bouvier  - `tcg <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/tcg>`__:
2017f631442SPierrick Bouvier    `TCG related tests <checktcg-ref>`. Contains code per architecture
2027f631442SPierrick Bouvier    (subfolder) and multiarch tests as well.
2037f631442SPierrick Bouvier  - `tsan <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/tsan>`_:
2047f631442SPierrick Bouvier    `Suppressions <tsan-suppressions>` for thread sanitizer.
2057f631442SPierrick Bouvier  - `uefi-test-tools <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/uefi-test-tools>`_:
2067f631442SPierrick Bouvier    Test tool for UEFI support.
2077f631442SPierrick Bouvier  - `unit <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/unit>`_:
2087f631442SPierrick Bouvier    QEMU `Unit tests <unit-tests>`.
2097f631442SPierrick Bouvier* `trace <https://gitlab.com/qemu-project/qemu/-/tree/master/trace>`_:
2107f631442SPierrick Bouvier  :ref:`Tracing framework <tracing>`. Used to print information associated to various
2117f631442SPierrick Bouvier  events during execution.
2127f631442SPierrick Bouvier* `ui <https://gitlab.com/qemu-project/qemu/-/tree/master/ui>`_:
2137f631442SPierrick Bouvier  QEMU User interfaces.
2147f631442SPierrick Bouvier* `util <https://gitlab.com/qemu-project/qemu/-/tree/master/util>`_:
2157f631442SPierrick Bouvier  Utility code used by other parts of QEMU.
216