|  | ======== | 
|  | Codebase | 
|  | ======== | 
|  |  | 
|  | This section presents the various parts of QEMU and how the codebase is | 
|  | organized. | 
|  |  | 
|  | Beyond giving succinct descriptions, the goal is to offer links to various | 
|  | parts of the documentation/codebase. | 
|  |  | 
|  | Subsystems | 
|  | ---------- | 
|  |  | 
|  | An exhaustive list of subsystems and associated files can be found in the | 
|  | `MAINTAINERS <https://gitlab.com/qemu-project/qemu/-/blob/master/MAINTAINERS>`_ | 
|  | file. | 
|  |  | 
|  | Some of the main QEMU subsystems are: | 
|  |  | 
|  | - `Accelerators<Accelerators>` | 
|  | - Block devices and `disk images<disk images>` support | 
|  | - `CI<ci>` and `Tests<testing>` | 
|  | - `Devices<device-emulation>` & Board models | 
|  | - `Documentation <documentation-root>` | 
|  | - `GDB support<GDB usage>` | 
|  | - :ref:`Migration<migration>` | 
|  | - `Monitor<QEMU monitor>` | 
|  | - :ref:`QOM (QEMU Object Model)<qom>` | 
|  | - `System mode<System emulation>` | 
|  | - :ref:`TCG (Tiny Code Generator)<tcg>` | 
|  | - `User mode<user-mode>` (`Linux<linux-user-mode>` & `BSD<bsd-user-mode>`) | 
|  | - User Interfaces | 
|  |  | 
|  | More documentation on QEMU subsystems can be found on :ref:`internal-subsystem` | 
|  | page. | 
|  |  | 
|  | The Grand tour | 
|  | -------------- | 
|  |  | 
|  | We present briefly here what every folder in the top directory of the codebase | 
|  | contains. Hop on! | 
|  |  | 
|  | The folder name links here will take you to that folder in our gitlab | 
|  | repository. Other links will take you to more detailed documentation for that | 
|  | subsystem, where we have it. Unfortunately not every subsystem has documentation | 
|  | yet, so sometimes the source code is all you have. | 
|  |  | 
|  | * `accel <https://gitlab.com/qemu-project/qemu/-/tree/master/accel>`_: | 
|  | Infrastructure and architecture agnostic code related to the various | 
|  | `accelerators <Accelerators>` supported by QEMU | 
|  | (TCG, KVM, hvf, whpx, xen, nvmm). | 
|  | Contains interfaces for operations that will be implemented per | 
|  | `target <https://gitlab.com/qemu-project/qemu/-/tree/master/target>`_. | 
|  | * `audio <https://gitlab.com/qemu-project/qemu/-/tree/master/audio>`_: | 
|  | Audio (host) support. | 
|  | * `authz <https://gitlab.com/qemu-project/qemu/-/tree/master/authz>`_: | 
|  | `QEMU Authorization framework<client authorization>`. | 
|  | * `backends <https://gitlab.com/qemu-project/qemu/-/tree/master/backends>`_: | 
|  | Various backends that are used to access resources on the host (e.g. for | 
|  | random number generation, memory backing or cryptographic functions). | 
|  | * `block <https://gitlab.com/qemu-project/qemu/-/tree/master/block>`_: | 
|  | Block devices and `image formats<disk images>` implementation. | 
|  | * `bsd-user <https://gitlab.com/qemu-project/qemu/-/tree/master/bsd-user>`_: | 
|  | `BSD User mode<bsd-user-mode>`. | 
|  | * build: Where the code built goes by default. You can tell the QEMU build | 
|  | system to put the built code anywhere else you like. | 
|  | * `chardev <https://gitlab.com/qemu-project/qemu/-/tree/master/chardev>`_: | 
|  | Various backends used by char devices. | 
|  | * `common-user <https://gitlab.com/qemu-project/qemu/-/tree/master/common-user>`_: | 
|  | User-mode assembly code for dealing with signals occurring during syscalls. | 
|  | * `configs <https://gitlab.com/qemu-project/qemu/-/tree/master/configs>`_: | 
|  | Makefiles defining configurations to build QEMU. | 
|  | * `contrib <https://gitlab.com/qemu-project/qemu/-/tree/master/contrib>`_: | 
|  | Community contributed devices/plugins/tools. | 
|  | * `crypto <https://gitlab.com/qemu-project/qemu/-/tree/master/crypto>`_: | 
|  | Cryptographic algorithms used in QEMU. | 
|  | * `disas <https://gitlab.com/qemu-project/qemu/-/tree/master/disas>`_: | 
|  | Disassembly functions used by QEMU target code. | 
|  | * `docs <https://gitlab.com/qemu-project/qemu/-/tree/master/docs>`_: | 
|  | QEMU Documentation. | 
|  | * `dump <https://gitlab.com/qemu-project/qemu/-/tree/master/dump>`_: | 
|  | Code to dump memory of a running VM. | 
|  | * `ebpf <https://gitlab.com/qemu-project/qemu/-/tree/master/ebpf>`_: | 
|  | eBPF program support in QEMU. `virtio-net RSS<ebpf-rss>` uses it. | 
|  | * `fpu <https://gitlab.com/qemu-project/qemu/-/tree/master/fpu>`_: | 
|  | Floating-point software emulation. | 
|  | * `fsdev <https://gitlab.com/qemu-project/qemu/-/tree/master/fsdev>`_: | 
|  | `VirtFS <https://www.linux-kvm.org/page/VirtFS>`_ support. | 
|  | * `gdbstub <https://gitlab.com/qemu-project/qemu/-/tree/master/gdbstub>`_: | 
|  | `GDB <GDB usage>` support. | 
|  | * `gdb-xml <https://gitlab.com/qemu-project/qemu/-/tree/master/gdb-xml>`_: | 
|  | Set of XML files describing architectures and used by `gdbstub <GDB usage>`. | 
|  | * `host <https://gitlab.com/qemu-project/qemu/-/tree/master/host>`_: | 
|  | Various architecture specific header files (crypto, atomic, memory | 
|  | operations). | 
|  | * `linux-headers <https://gitlab.com/qemu-project/qemu/-/tree/master/linux-headers>`_: | 
|  | A subset of headers imported from Linux kernel and used for implementing | 
|  | KVM support and user-mode. | 
|  | * `linux-user <https://gitlab.com/qemu-project/qemu/-/tree/master/linux-user>`_: | 
|  | `User mode <user-mode>` implementation. Contains one folder per target | 
|  | architecture. | 
|  | * `.gitlab-ci.d <https://gitlab.com/qemu-project/qemu/-/tree/master/.gitlab-ci.d>`_: | 
|  | `CI <ci>` yaml and scripts. | 
|  | * `include <https://gitlab.com/qemu-project/qemu/-/tree/master/include>`_: | 
|  | All headers associated to different subsystems in QEMU. The hierarchy used | 
|  | mirrors source code organization and naming. | 
|  | * `hw <https://gitlab.com/qemu-project/qemu/-/tree/master/hw>`_: | 
|  | `Devices <device-emulation>` and boards emulation. Devices are categorized by | 
|  | type/protocol/architecture and located in associated subfolder. | 
|  | * `io <https://gitlab.com/qemu-project/qemu/-/tree/master/io>`_: | 
|  | QEMU `I/O channels <https://lists.gnu.org/archive/html/qemu-devel/2015-11/msg04208.html>`_. | 
|  | * `libdecnumber <https://gitlab.com/qemu-project/qemu/-/tree/master/libdecnumber>`_: | 
|  | Import of gcc library, used to implement decimal number arithmetic. | 
|  | * `migration <https://gitlab.com/qemu-project/qemu/-/tree/master/migration>`__: | 
|  | :ref:`Migration framework <migration>`. | 
|  | * `monitor <https://gitlab.com/qemu-project/qemu/-/tree/master/monitor>`_: | 
|  | `Monitor <QEMU monitor>` implementation (HMP & QMP). | 
|  | * `nbd <https://gitlab.com/qemu-project/qemu/-/tree/master/nbd>`_: | 
|  | QEMU NBD (Network Block Device) server. | 
|  | * `net <https://gitlab.com/qemu-project/qemu/-/tree/master/net>`_: | 
|  | Network (host) support. | 
|  | * `pc-bios <https://gitlab.com/qemu-project/qemu/-/tree/master/pc-bios>`_: | 
|  | Contains pre-built firmware binaries and boot images, ready to use in | 
|  | QEMU without compilation. | 
|  | * `plugins <https://gitlab.com/qemu-project/qemu/-/tree/master/plugins>`_: | 
|  | :ref:`TCG plugins <tcg-plugins>` core implementation. Plugins can be found in | 
|  | `tests <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/tcg/plugins>`__ | 
|  | and `contrib <https://gitlab.com/qemu-project/qemu/-/tree/master/contrib/plugins>`__ | 
|  | folders. | 
|  | * `po <https://gitlab.com/qemu-project/qemu/-/tree/master/po>`_: | 
|  | Translation files. | 
|  | * `python <https://gitlab.com/qemu-project/qemu/-/tree/master/python>`_: | 
|  | Python part of our build/test system. | 
|  | * `qapi <https://gitlab.com/qemu-project/qemu/-/tree/master/qapi>`_: | 
|  | `QAPI <qapi>` implementation. | 
|  | * `qobject <https://gitlab.com/qemu-project/qemu/-/tree/master/qobject>`_: | 
|  | QEMU Object implementation. | 
|  | * `qga <https://gitlab.com/qemu-project/qemu/-/tree/master/qga>`_: | 
|  | QEMU `Guest agent <qemu-ga>` implementation. | 
|  | * `qom <https://gitlab.com/qemu-project/qemu/-/tree/master/qom>`_: | 
|  | QEMU :ref:`Object model <qom>` implementation, with monitor associated commands. | 
|  | * `replay <https://gitlab.com/qemu-project/qemu/-/tree/master/replay>`_: | 
|  | QEMU :ref:`Record/replay <replay>` implementation. | 
|  | * `roms <https://gitlab.com/qemu-project/qemu/-/tree/master/roms>`_: | 
|  | Contains source code for various firmware and ROMs, which can be compiled if | 
|  | custom or updated versions are needed. | 
|  | * `rust <https://gitlab.com/qemu-project/qemu/-/tree/master/rust>`_: | 
|  | Rust integration in QEMU. It contains the new interfaces defined and | 
|  | associated devices using it. | 
|  | * `scripts <https://gitlab.com/qemu-project/qemu/-/tree/master/scripts>`_: | 
|  | Collection of scripts used in build and test systems, and various | 
|  | tools for QEMU codebase and execution traces. | 
|  | * `scsi <https://gitlab.com/qemu-project/qemu/-/tree/master/scsi>`_: | 
|  | Code related to SCSI support, used by SCSI devices. | 
|  | * `semihosting <https://gitlab.com/qemu-project/qemu/-/tree/master/semihosting>`_: | 
|  | QEMU `Semihosting <Semihosting>` implementation. | 
|  | * `stats <https://gitlab.com/qemu-project/qemu/-/tree/master/stats>`_: | 
|  | `Monitor <QEMU monitor>` stats commands implementation. | 
|  | * `storage-daemon <https://gitlab.com/qemu-project/qemu/-/tree/master/storage-daemon>`_: | 
|  | QEMU `Storage daemon <storage-daemon>` implementation. | 
|  | * `stubs <https://gitlab.com/qemu-project/qemu/-/tree/master/stubs>`_: | 
|  | Various stubs (empty functions) used to compile QEMU with specific | 
|  | configurations. | 
|  | * `subprojects <https://gitlab.com/qemu-project/qemu/-/tree/master/subprojects>`_: | 
|  | QEMU submodules used by QEMU build system. | 
|  | * `system <https://gitlab.com/qemu-project/qemu/-/tree/master/system>`_: | 
|  | QEMU `system mode <System emulation>` implementation (cpu, mmu, boot support). | 
|  | * `target <https://gitlab.com/qemu-project/qemu/-/tree/master/target>`_: | 
|  | Contains code for all target architectures supported (one subfolder | 
|  | per arch). For every architecture, you can find accelerator specific | 
|  | implementations. | 
|  | * `tcg <https://gitlab.com/qemu-project/qemu/-/tree/master/tcg>`_: | 
|  | :ref:`TCG <tcg>` related code. | 
|  | Contains one subfolder per host supported architecture. | 
|  | * `tests <https://gitlab.com/qemu-project/qemu/-/tree/master/tests>`_: | 
|  | QEMU `test <testing>` suite | 
|  |  | 
|  | - `data <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/data>`_: | 
|  | Data for various tests. | 
|  | - `decode <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/decode>`_: | 
|  | Testsuite for :ref:`decodetree <decodetree>` implementation. | 
|  | - `docker <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/docker>`_: | 
|  | Code and scripts to create `containers <container-ref>` used in `CI <ci>`. | 
|  | - `fp <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/fp>`_: | 
|  | QEMU testsuite for soft float implementation. | 
|  | - `functional <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/functional>`_: | 
|  | `Functional tests <checkfunctional-ref>` (full VM boot). | 
|  | - `lcitool <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/lcitool>`_: | 
|  | Generate dockerfiles for CI containers. | 
|  | - `migration <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/migration>`_: | 
|  | Test scripts and data for :ref:`Migration framework <migration>`. | 
|  | - `multiboot <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/multiboot>`_: | 
|  | Test multiboot functionality for x86_64/i386. | 
|  | - `qapi-schema <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/qapi-schema>`_: | 
|  | Test scripts and data for `QAPI <qapi-tests>`. | 
|  | - `qemu-iotests <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/qemu-iotests>`_: | 
|  | `Disk image and block tests <qemu-iotests>`. | 
|  | - `qtest <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/qtest>`_: | 
|  | `Device emulation testing <qtest>`. | 
|  | - `tcg <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/tcg>`__: | 
|  | `TCG related tests <checktcg-ref>`. Contains code per architecture | 
|  | (subfolder) and multiarch tests as well. | 
|  | - `tsan <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/tsan>`_: | 
|  | `Suppressions <tsan-suppressions>` for thread sanitizer. | 
|  | - `uefi-test-tools <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/uefi-test-tools>`_: | 
|  | Test tool for UEFI support. | 
|  | - `unit <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/unit>`_: | 
|  | QEMU `Unit tests <unit-tests>`. | 
|  | * `trace <https://gitlab.com/qemu-project/qemu/-/tree/master/trace>`_: | 
|  | :ref:`Tracing framework <tracing>`. Used to print information associated to various | 
|  | events during execution. | 
|  | * `ui <https://gitlab.com/qemu-project/qemu/-/tree/master/ui>`_: | 
|  | QEMU User interfaces. | 
|  | * `util <https://gitlab.com/qemu-project/qemu/-/tree/master/util>`_: | 
|  | Utility code used by other parts of QEMU. |