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 87f631442SPierrick BouvierBeyond giving succint 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>` 26*30ab96cfSJohn 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>`_: 707f631442SPierrick Bouvier User-mode assembly code for dealing with signals occuring 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>`_: 1057f631442SPierrick Bouvier All headers associated to different subsystems in QEMU. The hierachy 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>`__: 115*30ab96cfSJohn 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>`_: 1197f631442SPierrick Bouvier QEMU `NBD (Network Block Device) <nbd>` 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 - `avocado <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/avocado>`_: 1797f631442SPierrick Bouvier Functional tests booting full VM using `Avocado framework <checkavocado-ref>`. 1807f631442SPierrick Bouvier Those tests will be transformed and moved into 1817f631442SPierrick Bouvier `tests/functional <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/functional>`_ 1827f631442SPierrick Bouvier in the future. 1837f631442SPierrick Bouvier - `data <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/data>`_: 1847f631442SPierrick Bouvier Data for various tests. 1857f631442SPierrick Bouvier - `decode <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/decode>`_: 1867f631442SPierrick Bouvier Testsuite for :ref:`decodetree <decodetree>` implementation. 1877f631442SPierrick Bouvier - `docker <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/docker>`_: 1887f631442SPierrick Bouvier Code and scripts to create `containers <container-ref>` used in `CI <ci>`. 1897f631442SPierrick Bouvier - `fp <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/fp>`_: 1907f631442SPierrick Bouvier QEMU testsuite for soft float implementation. 1917f631442SPierrick Bouvier - `functional <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/functional>`_: 1927f631442SPierrick Bouvier `Functional tests <checkfunctional-ref>` (full VM boot). 1937f631442SPierrick Bouvier - `lcitool <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/lcitool>`_: 1947f631442SPierrick Bouvier Generate dockerfiles for CI containers. 1957f631442SPierrick Bouvier - `migration <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/migration>`_: 196*30ab96cfSJohn Snow Test scripts and data for :ref:`Migration framework <migration>`. 1977f631442SPierrick Bouvier - `multiboot <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/multiboot>`_: 1987f631442SPierrick Bouvier Test multiboot functionality for x86_64/i386. 1997f631442SPierrick Bouvier - `qapi-schema <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/qapi-schema>`_: 2007f631442SPierrick Bouvier Test scripts and data for `QAPI <qapi-tests>`. 2017f631442SPierrick Bouvier - `qemu-iotests <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/qemu-iotests>`_: 2027f631442SPierrick Bouvier `Disk image and block tests <qemu-iotests>`. 2037f631442SPierrick Bouvier - `qtest <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/qtest>`_: 2047f631442SPierrick Bouvier `Device emulation testing <qtest>`. 2057f631442SPierrick Bouvier - `tcg <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/tcg>`__: 2067f631442SPierrick Bouvier `TCG related tests <checktcg-ref>`. Contains code per architecture 2077f631442SPierrick Bouvier (subfolder) and multiarch tests as well. 2087f631442SPierrick Bouvier - `tsan <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/tsan>`_: 2097f631442SPierrick Bouvier `Suppressions <tsan-suppressions>` for thread sanitizer. 2107f631442SPierrick Bouvier - `uefi-test-tools <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/uefi-test-tools>`_: 2117f631442SPierrick Bouvier Test tool for UEFI support. 2127f631442SPierrick Bouvier - `unit <https://gitlab.com/qemu-project/qemu/-/tree/master/tests/unit>`_: 2137f631442SPierrick Bouvier QEMU `Unit tests <unit-tests>`. 2147f631442SPierrick Bouvier* `trace <https://gitlab.com/qemu-project/qemu/-/tree/master/trace>`_: 2157f631442SPierrick Bouvier :ref:`Tracing framework <tracing>`. Used to print information associated to various 2167f631442SPierrick Bouvier events during execution. 2177f631442SPierrick Bouvier* `ui <https://gitlab.com/qemu-project/qemu/-/tree/master/ui>`_: 2187f631442SPierrick Bouvier QEMU User interfaces. 2197f631442SPierrick Bouvier* `util <https://gitlab.com/qemu-project/qemu/-/tree/master/util>`_: 2207f631442SPierrick Bouvier Utility code used by other parts of QEMU. 221