Files
server/usr/share/doc/qemu-system-common/system/device-emulation.html
2026-01-07 20:52:11 +01:00

277 lines
17 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html class="writer-html5" lang="en" data-content_root="../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Device Emulation &mdash; QEMU Debian 1:8.2.2+ds-0ubuntu1.11 documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=fa44fd50" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css?v=86f27845" />
<link rel="stylesheet" type="text/css" href="../_static/theme_overrides.css?v=08e6c168" />
<link rel="shortcut icon" href="../_static/qemu_32x32.png"/>
<script src="../_static/jquery.js?v=8dae8fb0"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../_static/documentation_options.js?v=802af9f6"></script>
<script src="../_static/doctools.js?v=888ff710"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../_static/custom.js?v=2ab9f71d"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="CAN Bus Emulation Support" href="devices/can.html" />
<link rel="prev" title="Invocation" href="invocation.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" style="background: #802400" >
<a href="../index.html" class="icon icon-home">
QEMU
<img src="../_static/qemu_128x128.png" class="logo" alt="Logo"/>
</a>
<div class="version">
8.2.2
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../about/index.html">About QEMU</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">System Emulation</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="introduction.html">Introduction</a></li>
<li class="toctree-l2"><a class="reference internal" href="invocation.html">Invocation</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Device Emulation</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#common-terms">Common Terms</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#device-front-end">Device Front End</a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-buses">Device Buses</a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-back-end">Device Back End</a></li>
<li class="toctree-l4"><a class="reference internal" href="#device-pass-through">Device Pass Through</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#emulated-devices">Emulated Devices</a><ul>
<li class="toctree-l4"><a class="reference internal" href="devices/can.html">CAN Bus Emulation Support</a></li>
<li class="toctree-l4"><a class="reference internal" href="devices/ccid.html">Chip Card Interface Device (CCID)</a></li>
<li class="toctree-l4"><a class="reference internal" href="devices/cxl.html">Compute Express Link (CXL)</a></li>
<li class="toctree-l4"><a class="reference internal" href="devices/ivshmem.html">Inter-VM Shared Memory device</a></li>
<li class="toctree-l4"><a class="reference internal" href="devices/keyboard.html">Sparc32 keyboard</a></li>
<li class="toctree-l4"><a class="reference internal" href="devices/net.html">Network emulation</a></li>
<li class="toctree-l4"><a class="reference internal" href="devices/nvme.html">NVMe Emulation</a></li>
<li class="toctree-l4"><a class="reference internal" href="devices/usb.html">USB emulation</a></li>
<li class="toctree-l4"><a class="reference internal" href="devices/vhost-user.html">vhost-user back ends</a></li>
<li class="toctree-l4"><a class="reference internal" href="devices/virtio-gpu.html">virtio-gpu</a></li>
<li class="toctree-l4"><a class="reference internal" href="devices/virtio-pmem.html">virtio pmem</a></li>
<li class="toctree-l4"><a class="reference internal" href="devices/virtio-snd.html">virtio sound</a></li>
<li class="toctree-l4"><a class="reference internal" href="devices/vhost-user-rng.html">QEMU vhost-user-rng - RNG emulation</a></li>
<li class="toctree-l4"><a class="reference internal" href="devices/canokey.html">CanoKey QEMU</a></li>
<li class="toctree-l4"><a class="reference internal" href="devices/usb-u2f.html">Universal Second Factor (U2F) USB Key Device</a></li>
<li class="toctree-l4"><a class="reference internal" href="devices/igb.html">igb</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="keys.html">Keys in the graphical frontends</a></li>
<li class="toctree-l2"><a class="reference internal" href="mux-chardev.html">Keys in the character backend multiplexer</a></li>
<li class="toctree-l2"><a class="reference internal" href="monitor.html">QEMU Monitor</a></li>
<li class="toctree-l2"><a class="reference internal" href="images.html">Disk Images</a></li>
<li class="toctree-l2"><a class="reference internal" href="virtio-net-failover.html">QEMU virtio-net standby (net_failover)</a></li>
<li class="toctree-l2"><a class="reference internal" href="linuxboot.html">Direct Linux Boot</a></li>
<li class="toctree-l2"><a class="reference internal" href="generic-loader.html">Generic Loader</a></li>
<li class="toctree-l2"><a class="reference internal" href="guest-loader.html">Guest Loader</a></li>
<li class="toctree-l2"><a class="reference internal" href="barrier.html">QEMU Barrier Client</a></li>
<li class="toctree-l2"><a class="reference internal" href="vnc-security.html">VNC security</a></li>
<li class="toctree-l2"><a class="reference internal" href="tls.html">TLS setup for network services</a></li>
<li class="toctree-l2"><a class="reference internal" href="secrets.html">Providing secret data to QEMU</a></li>
<li class="toctree-l2"><a class="reference internal" href="authz.html">Client authorization</a></li>
<li class="toctree-l2"><a class="reference internal" href="gdb.html">GDB usage</a></li>
<li class="toctree-l2"><a class="reference internal" href="replay.html">Record/replay</a></li>
<li class="toctree-l2"><a class="reference internal" href="managed-startup.html">Managed start up options</a></li>
<li class="toctree-l2"><a class="reference internal" href="bootindex.html">Managing device boot order with bootindex properties</a></li>
<li class="toctree-l2"><a class="reference internal" href="cpu-hotplug.html">Virtual CPU hotplug</a></li>
<li class="toctree-l2"><a class="reference internal" href="pr-manager.html">Persistent reservation managers</a></li>
<li class="toctree-l2"><a class="reference internal" href="targets.html">QEMU System Emulator Targets</a></li>
<li class="toctree-l2"><a class="reference internal" href="security.html">Security</a></li>
<li class="toctree-l2"><a class="reference internal" href="multi-process.html">Multi-process QEMU</a></li>
<li class="toctree-l2"><a class="reference internal" href="confidential-guest-support.html">Confidential Guest Support</a></li>
<li class="toctree-l2"><a class="reference internal" href="vm-templating.html">QEMU VM templating</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../user/index.html">User Mode Emulation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../tools/index.html">Tools</a></li>
<li class="toctree-l1"><a class="reference internal" href="../interop/index.html">System Emulation Management and Interoperability</a></li>
<li class="toctree-l1"><a class="reference internal" href="../specs/index.html">System Emulation Guest Hardware Specifications</a></li>
<li class="toctree-l1"><a class="reference internal" href="../devel/index.html">Developer Information</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" style="background: #802400" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">QEMU</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="index.html">System Emulation</a></li>
<li class="breadcrumb-item active">Device Emulation</li>
<li class="wy-breadcrumbs-aside">
<a href="https://gitlab.com/qemu-project/qemu/blob/master/docs/system/device-emulation.rst" class="fa fa-gitlab"> Edit on GitLab</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="device-emulation">
<span id="id1"></span><h1>Device Emulation<a class="headerlink" href="#device-emulation" title="Link to this heading"></a></h1>
<p>QEMU supports the emulation of a large number of devices from
peripherals such network cards and USB devices to integrated systems
on a chip (SoCs). Configuration of these is often a source of
confusion so it helps to have an understanding of some of the terms
used to describes devices within QEMU.</p>
<section id="common-terms">
<h2>Common Terms<a class="headerlink" href="#common-terms" title="Link to this heading"></a></h2>
<section id="device-front-end">
<h3>Device Front End<a class="headerlink" href="#device-front-end" title="Link to this heading"></a></h3>
<p>A device front end is how a device is presented to the guest. The type
of device presented should match the hardware that the guest operating
system is expecting to see. All devices can be specified with the
<code class="docutils literal notranslate"><span class="pre">--device</span></code> command line option. Running QEMU with the command line
options <code class="docutils literal notranslate"><span class="pre">--device</span> <span class="pre">help</span></code> will list all devices it is aware of. Using
the command line <code class="docutils literal notranslate"><span class="pre">--device</span> <span class="pre">foo,help</span></code> will list the additional
configuration options available for that device.</p>
<p>A front end is often paired with a back end, which describes how the
hosts resources are used in the emulation.</p>
</section>
<section id="device-buses">
<h3>Device Buses<a class="headerlink" href="#device-buses" title="Link to this heading"></a></h3>
<p>Most devices will exist on a BUS of some sort. Depending on the
machine model you choose (<code class="docutils literal notranslate"><span class="pre">-M</span> <span class="pre">foo</span></code>) a number of buses will have been
automatically created. In most cases the BUS a device is attached to
can be inferred, for example PCI devices are generally automatically
allocated to the next free address of first PCI bus found. However in
complicated configurations you can explicitly specify what bus
(<code class="docutils literal notranslate"><span class="pre">bus=ID</span></code>) a device is attached to along with its address
(<code class="docutils literal notranslate"><span class="pre">addr=N</span></code>).</p>
<p>Some devices, for example a PCI SCSI host controller, will add an
additional buses to the system that other devices can be attached to.
A hypothetical chain of devices might look like:</p>
<blockquote>
<div><p>device foo,bus=pci.0,addr=0,id=foo
device bar,bus=foo.0,addr=1,id=baz</p>
</div></blockquote>
<p>which would be a bar device (with the ID of baz) which is attached to
the first foo bus (foo.0) at address 1. The foo device which provides
that bus is itself is attached to the first PCI bus (pci.0).</p>
</section>
<section id="device-back-end">
<h3>Device Back End<a class="headerlink" href="#device-back-end" title="Link to this heading"></a></h3>
<p>The back end describes how the data from the emulated device will be
processed by QEMU. The configuration of the back end is usually
specific to the class of device being emulated. For example serial
devices will be backed by a <code class="docutils literal notranslate"><span class="pre">--chardev</span></code> which can redirect the data
to a file or socket or some other system. Storage devices are handled
by <code class="docutils literal notranslate"><span class="pre">--blockdev</span></code> which will specify how blocks are handled, for
example being stored in a qcow2 file or accessing a raw host disk
partition. Back ends can sometimes be stacked to implement features
like snapshots.</p>
<p>While the choice of back end is generally transparent to the guest,
there are cases where features will not be reported to the guest if
the back end is unable to support it.</p>
</section>
<section id="device-pass-through">
<h3>Device Pass Through<a class="headerlink" href="#device-pass-through" title="Link to this heading"></a></h3>
<p>Device pass through is where the device is actually given access to
the underlying hardware. This can be as simple as exposing a single
USB device on the host system to the guest or dedicating a video card
in a PCI slot to the exclusive use of the guest.</p>
</section>
</section>
<section id="emulated-devices">
<h2>Emulated Devices<a class="headerlink" href="#emulated-devices" title="Link to this heading"></a></h2>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="devices/can.html">CAN Bus Emulation Support</a></li>
<li class="toctree-l1"><a class="reference internal" href="devices/ccid.html">Chip Card Interface Device (CCID)</a></li>
<li class="toctree-l1"><a class="reference internal" href="devices/cxl.html">Compute Express Link (CXL)</a></li>
<li class="toctree-l1"><a class="reference internal" href="devices/ivshmem.html">Inter-VM Shared Memory device</a></li>
<li class="toctree-l1"><a class="reference internal" href="devices/keyboard.html">Sparc32 keyboard</a></li>
<li class="toctree-l1"><a class="reference internal" href="devices/net.html">Network emulation</a></li>
<li class="toctree-l1"><a class="reference internal" href="devices/nvme.html">NVMe Emulation</a></li>
<li class="toctree-l1"><a class="reference internal" href="devices/usb.html">USB emulation</a></li>
<li class="toctree-l1"><a class="reference internal" href="devices/vhost-user.html">vhost-user back ends</a></li>
<li class="toctree-l1"><a class="reference internal" href="devices/virtio-gpu.html">virtio-gpu</a></li>
<li class="toctree-l1"><a class="reference internal" href="devices/virtio-pmem.html">virtio pmem</a></li>
<li class="toctree-l1"><a class="reference internal" href="devices/virtio-snd.html">virtio sound</a></li>
<li class="toctree-l1"><a class="reference internal" href="devices/vhost-user-rng.html">QEMU vhost-user-rng - RNG emulation</a></li>
<li class="toctree-l1"><a class="reference internal" href="devices/canokey.html">CanoKey QEMU</a></li>
<li class="toctree-l1"><a class="reference internal" href="devices/usb-u2f.html">Universal Second Factor (U2F) USB Key Device</a></li>
<li class="toctree-l1"><a class="reference internal" href="devices/igb.html">igb</a></li>
</ul>
</div>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="invocation.html" class="btn btn-neutral float-left" title="Invocation" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="devices/can.html" class="btn btn-neutral float-right" title="CAN Bus Emulation Support" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2025, The QEMU Project Developers.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
<!-- Empty para to force a blank line after "Built with Sphinx ..." -->
<p></p>
<p>This documentation is for QEMU version 8.2.2.</p>
<p><a href="../about/license.html">QEMU and this manual are released under the
GNU General Public License, version 2.</a></p>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>