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

270 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>Generic Loader &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="Guest Loader" href="guest-loader.html" />
<link rel="prev" title="Direct Linux Boot" href="linuxboot.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"><a class="reference internal" href="device-emulation.html">Device Emulation</a></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 current"><a class="current reference internal" href="#">Generic Loader</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#loading-data-into-memory-values">Loading Data into Memory Values</a></li>
<li class="toctree-l3"><a class="reference internal" href="#setting-a-cpu-s-program-counter">Setting a CPUs Program Counter</a></li>
<li class="toctree-l3"><a class="reference internal" href="#loading-files">Loading Files</a></li>
<li class="toctree-l3"><a class="reference internal" href="#restrictions-and-todos">Restrictions and ToDos</a></li>
</ul>
</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">Generic Loader</li>
<li class="wy-breadcrumbs-aside">
<a href="https://gitlab.com/qemu-project/qemu/blob/master/docs/system/generic-loader.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="generic-loader">
<h1>Generic Loader<a class="headerlink" href="#generic-loader" title="Link to this heading"></a></h1>
<p>The loader device allows the user to load multiple images or values into
QEMU at startup.</p>
<section id="loading-data-into-memory-values">
<h2>Loading Data into Memory Values<a class="headerlink" href="#loading-data-into-memory-values" title="Link to this heading"></a></h2>
<p>The loader device allows memory values to be set from the command line. This
can be done by following the syntax below:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">-</span><span class="n">device</span> <span class="n">loader</span><span class="p">,</span><span class="n">addr</span><span class="o">=&lt;</span><span class="n">addr</span><span class="o">&gt;</span><span class="p">,</span><span class="n">data</span><span class="o">=&lt;</span><span class="n">data</span><span class="o">&gt;</span><span class="p">,</span><span class="n">data</span><span class="o">-</span><span class="nb">len</span><span class="o">=&lt;</span><span class="n">data</span><span class="o">-</span><span class="nb">len</span><span class="o">&gt;</span> \
<span class="p">[,</span><span class="n">data</span><span class="o">-</span><span class="n">be</span><span class="o">=&lt;</span><span class="n">data</span><span class="o">-</span><span class="n">be</span><span class="o">&gt;</span><span class="p">][,</span><span class="n">cpu</span><span class="o">-</span><span class="n">num</span><span class="o">=&lt;</span><span class="n">cpu</span><span class="o">-</span><span class="n">num</span><span class="o">&gt;</span><span class="p">]</span>
</pre></div>
</div>
<dl class="simple">
<dt><code class="docutils literal notranslate"><span class="pre">&lt;addr&gt;</span></code></dt><dd><p>The address to store the data in.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">&lt;data&gt;</span></code></dt><dd><p>The value to be written to the address. The maximum size of the data
is 8 bytes.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">&lt;data-len&gt;</span></code></dt><dd><p>The length of the data in bytes. This argument must be included if
the data argument is.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">&lt;data-be&gt;</span></code></dt><dd><p>Set to true if the data to be stored on the guest should be written
as big endian data. The default is to write little endian data.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">&lt;cpu-num&gt;</span></code></dt><dd><p>The number of the CPUs address space where the data should be
loaded. If not specified the address space of the first CPU is used.</p>
</dd>
</dl>
<p>All values are parsed using the standard QemuOps parsing. This allows the user
to specify any values in any format supported. By default the values
will be parsed as decimal. To use hex values the user should prefix the number
with a 0x.</p>
<p>An example of loading value 0x8000000e to address 0xfd1a0104 is:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">-</span><span class="n">device</span> <span class="n">loader</span><span class="p">,</span><span class="n">addr</span><span class="o">=</span><span class="mh">0xfd1a0104</span><span class="p">,</span><span class="n">data</span><span class="o">=</span><span class="mh">0x8000000e</span><span class="p">,</span><span class="n">data</span><span class="o">-</span><span class="nb">len</span><span class="o">=</span><span class="mi">4</span>
</pre></div>
</div>
</section>
<section id="setting-a-cpu-s-program-counter">
<h2>Setting a CPUs Program Counter<a class="headerlink" href="#setting-a-cpu-s-program-counter" title="Link to this heading"></a></h2>
<p>The loader device allows the CPUs PC to be set from the command line. This
can be done by following the syntax below:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">-</span><span class="n">device</span> <span class="n">loader</span><span class="p">,</span><span class="n">addr</span><span class="o">=&lt;</span><span class="n">addr</span><span class="o">&gt;</span><span class="p">,</span><span class="n">cpu</span><span class="o">-</span><span class="n">num</span><span class="o">=&lt;</span><span class="n">cpu</span><span class="o">-</span><span class="n">num</span><span class="o">&gt;</span>
</pre></div>
</div>
<dl class="simple">
<dt><code class="docutils literal notranslate"><span class="pre">&lt;addr&gt;</span></code></dt><dd><p>The value to use as the CPUs PC.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">&lt;cpu-num&gt;</span></code></dt><dd><p>The number of the CPU whose PC should be set to the specified value.</p>
</dd>
</dl>
<p>All values are parsed using the standard QemuOpts parsing. This allows the user
to specify any values in any format supported. By default the values
will be parsed as decimal. To use hex values the user should prefix the number
with a 0x.</p>
<p>An example of setting CPU 0s PC to 0x8000 is:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">-</span><span class="n">device</span> <span class="n">loader</span><span class="p">,</span><span class="n">addr</span><span class="o">=</span><span class="mh">0x8000</span><span class="p">,</span><span class="n">cpu</span><span class="o">-</span><span class="n">num</span><span class="o">=</span><span class="mi">0</span>
</pre></div>
</div>
</section>
<section id="loading-files">
<h2>Loading Files<a class="headerlink" href="#loading-files" title="Link to this heading"></a></h2>
<p>The loader device also allows files to be loaded into memory. It can load ELF,
U-Boot, and Intel HEX executable formats as well as raw images. The syntax is
shown below:</p>
<blockquote>
<div><p>-device loader,file=&lt;file&gt;[,addr=&lt;addr&gt;][,cpu-num=&lt;cpu-num&gt;][,force-raw=&lt;raw&gt;]</p>
</div></blockquote>
<dl class="simple">
<dt><code class="docutils literal notranslate"><span class="pre">&lt;file&gt;</span></code></dt><dd><p>A file to be loaded into memory</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">&lt;addr&gt;</span></code></dt><dd><p>The memory address where the file should be loaded. This is required
for raw images and ignored for non-raw files.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">&lt;cpu-num&gt;</span></code></dt><dd><p>This specifies the CPU that should be used. This is an
optional argument and will cause the CPUs PC to be set to the
memory address where the raw file is loaded or the entry point
specified in the executable format header. This option should only
be used for the boot image. This will also cause the image to be
written to the specified CPUs address space. If not specified, the
default is CPU 0.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">&lt;force-raw&gt;</span></code></dt><dd><p>Setting force-raw=on forces the file to be treated as a raw image.
This can be used to load supported executable formats as if they
were raw.</p>
</dd>
</dl>
<p>All values are parsed using the standard QemuOpts parsing. This allows the user
to specify any values in any format supported. By default the values
will be parsed as decimal. To use hex values the user should prefix the number
with a 0x.</p>
<p>An example of loading an ELF file which CPU0 will boot is shown below:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">-</span><span class="n">device</span> <span class="n">loader</span><span class="p">,</span><span class="n">file</span><span class="o">=./</span><span class="n">images</span><span class="o">/</span><span class="n">boot</span><span class="o">.</span><span class="n">elf</span><span class="p">,</span><span class="n">cpu</span><span class="o">-</span><span class="n">num</span><span class="o">=</span><span class="mi">0</span>
</pre></div>
</div>
</section>
<section id="restrictions-and-todos">
<h2>Restrictions and ToDos<a class="headerlink" href="#restrictions-and-todos" title="Link to this heading"></a></h2>
<p>At the moment it is just assumed that if you specify a cpu-num then
you want to set the PC as well. This might not always be the case. In
future the internal state set_pc (which exists in the generic loader
now) should be exposed to the user so that they can choose if the PC
is set or not.</p>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="linuxboot.html" class="btn btn-neutral float-left" title="Direct Linux Boot" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="guest-loader.html" class="btn btn-neutral float-right" title="Guest Loader" 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>