Files
server/usr/share/doc/qemu-system-common/system/arm/xlnx-versal-virt.html
2026-01-07 20:52:11 +01:00

397 lines
32 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>Xilinx Versal Virt (xlnx-versal-virt) &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="Xen Device Emulation Backend (xenpvh)" href="xenpvh.html" />
<link rel="prev" title="virt generic virtual platform (virt)" href="virt.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"><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 current"><a class="reference internal" href="../targets.html">QEMU System Emulator Targets</a><ul class="current">
<li class="toctree-l3 current"><a class="reference internal" href="../target-arm.html">Arm System emulator</a><ul class="current">
<li class="toctree-l4"><a class="reference internal" href="../target-arm.html#choosing-a-board-model">Choosing a board model</a></li>
<li class="toctree-l4 current"><a class="reference internal" href="../target-arm.html#board-specific-documentation">Board-specific documentation</a></li>
<li class="toctree-l4"><a class="reference internal" href="../target-arm.html#emulated-cpu-architecture-support">Emulated CPU architecture support</a></li>
<li class="toctree-l4"><a class="reference internal" href="../target-arm.html#arm-cpu-features">Arm CPU features</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../target-avr.html">AVR System emulator</a></li>
<li class="toctree-l3"><a class="reference internal" href="../target-m68k.html">ColdFire System emulator</a></li>
<li class="toctree-l3"><a class="reference internal" href="../target-mips.html">MIPS System emulator</a></li>
<li class="toctree-l3"><a class="reference internal" href="../target-ppc.html">PowerPC System emulator</a></li>
<li class="toctree-l3"><a class="reference internal" href="../target-openrisc.html">OpenRISC System emulator</a></li>
<li class="toctree-l3"><a class="reference internal" href="../target-riscv.html">RISC-V System emulator</a></li>
<li class="toctree-l3"><a class="reference internal" href="../target-rx.html">RX System emulator</a></li>
<li class="toctree-l3"><a class="reference internal" href="../target-s390x.html">s390x System emulator</a></li>
<li class="toctree-l3"><a class="reference internal" href="../target-sparc.html">Sparc32 System emulator</a></li>
<li class="toctree-l3"><a class="reference internal" href="../target-sparc64.html">Sparc64 System emulator</a></li>
<li class="toctree-l3"><a class="reference internal" href="../target-i386.html">x86 System emulator</a></li>
<li class="toctree-l3"><a class="reference internal" href="../target-xtensa.html">Xtensa System emulator</a></li>
</ul>
</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"><a href="../targets.html">QEMU System Emulator Targets</a></li>
<li class="breadcrumb-item"><a href="../target-arm.html">Arm System emulator</a></li>
<li class="breadcrumb-item active">Xilinx Versal Virt (<code class="docutils literal notranslate"><span class="pre">xlnx-versal-virt</span></code>)</li>
<li class="wy-breadcrumbs-aside">
<a href="https://gitlab.com/qemu-project/qemu/blob/master/docs/system/arm/xlnx-versal-virt.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="xilinx-versal-virt-xlnx-versal-virt">
<h1>Xilinx Versal Virt (<code class="docutils literal notranslate"><span class="pre">xlnx-versal-virt</span></code>)<a class="headerlink" href="#xilinx-versal-virt-xlnx-versal-virt" title="Link to this heading"></a></h1>
<p>Xilinx Versal is a family of heterogeneous multi-core SoCs
(System on Chip) that combine traditional hardened CPUs and I/O
peripherals in a Processing System (PS) with runtime programmable
FPGA logic (PL) and an Artificial Intelligence Engine (AIE).</p>
<p>More details here:
<a class="reference external" href="https://www.xilinx.com/products/silicon-devices/acap/versal.html">https://www.xilinx.com/products/silicon-devices/acap/versal.html</a></p>
<p>The family of Versal SoCs share a single architecture but come in
different parts with different speed grades, amounts of PL and
other differences.</p>
<p>The Xilinx Versal Virt board in QEMU is a model of a virtual board
(does not exist in reality) with a virtual Versal SoC without I/O
limitations. Currently, we support the following cores and devices:</p>
<p>Implemented CPU cores:</p>
<ul class="simple">
<li><p>2 ACPUs (ARM Cortex-A72)</p></li>
</ul>
<p>Implemented devices:</p>
<ul class="simple">
<li><p>Interrupt controller (ARM GICv3)</p></li>
<li><p>2 UARTs (ARM PL011)</p></li>
<li><p>An RTC (Versal built-in)</p></li>
<li><p>2 GEMs (Cadence MACB Ethernet MACs)</p></li>
<li><p>8 ADMA (Xilinx zDMA) channels</p></li>
<li><p>2 SD Controllers</p></li>
<li><p>OCM (256KB of On Chip Memory)</p></li>
<li><p>XRAM (4MB of on chip Accelerator RAM)</p></li>
<li><p>DDR memory</p></li>
<li><p>BBRAM (36 bytes of Battery-backed RAM)</p></li>
<li><p>eFUSE (3072 bytes of one-time field-programmable bit array)</p></li>
<li><p>2 CANFDs</p></li>
</ul>
<p>QEMU does not yet model any other devices, including the PL and the AI Engine.</p>
<p>Other differences between the hardware and the QEMU model:</p>
<ul class="simple">
<li><p>QEMU allows the amount of DDR memory provided to be specified with the
<code class="docutils literal notranslate"><span class="pre">-m</span></code> argument. If a DTB is provided on the command line then QEMU will
edit it to include suitable entries describing the Versal DDR memory ranges.</p></li>
<li><p>QEMU provides 8 virtio-mmio virtio transports; these start at
address <code class="docutils literal notranslate"><span class="pre">0xa0000000</span></code> and have IRQs from 111 and upwards.</p></li>
</ul>
<section id="running">
<h2>Running<a class="headerlink" href="#running" title="Link to this heading"></a></h2>
<p>If the user provides an Operating System to be loaded, we expect users
to use the <code class="docutils literal notranslate"><span class="pre">-kernel</span></code> command line option.</p>
<p>Users can load firmware or boot-loaders with the <code class="docutils literal notranslate"><span class="pre">-device</span> <span class="pre">loader</span></code> options.</p>
<p>When loading an OS, QEMU generates a DTB and selects an appropriate address
where it gets loaded. This DTB will be passed to the kernel in register x0.</p>
<p>If theres no <code class="docutils literal notranslate"><span class="pre">-kernel</span></code> option, we generate a DTB and place it at 0x1000
for boot-loaders or firmware to pick it up.</p>
<p>If users want to provide their own DTB, they can use the <code class="docutils literal notranslate"><span class="pre">-dtb</span></code> option.
These DTBs will have their memory nodes modified to match QEMUs
selected ram_size option before they get passed to the kernel or FW.</p>
<p>When loading an OS, we turn on QEMUs PSCI implementation with SMC
as the PSCI conduit. When theres no <code class="docutils literal notranslate"><span class="pre">-kernel</span></code> option, we assume the user
provides EL3 firmware to handle PSCI.</p>
<p>A few examples:</p>
<p>Direct Linux boot of a generic ARM64 upstream Linux kernel:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>qemu-system-aarch64<span class="w"> </span>-M<span class="w"> </span>xlnx-versal-virt<span class="w"> </span>-m<span class="w"> </span>2G<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-serial<span class="w"> </span>mon:stdio<span class="w"> </span>-display<span class="w"> </span>none<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-kernel<span class="w"> </span>arch/arm64/boot/Image<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-nic<span class="w"> </span>user<span class="w"> </span>-nic<span class="w"> </span>user<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-device<span class="w"> </span>virtio-rng-device,bus<span class="o">=</span>virtio-mmio-bus.0<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-drive<span class="w"> </span><span class="k">if</span><span class="o">=</span>none,index<span class="o">=</span><span class="m">0</span>,file<span class="o">=</span>hd0.qcow2,id<span class="o">=</span>hd0,snapshot<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-drive<span class="w"> </span><span class="nv">file</span><span class="o">=</span>qemu_sd.qcow2,if<span class="o">=</span>sd,index<span class="o">=</span><span class="m">0</span>,snapshot<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-device<span class="w"> </span>virtio-blk-device,drive<span class="o">=</span>hd0<span class="w"> </span>-append<span class="w"> </span><span class="nv">root</span><span class="o">=</span>/dev/vda
</pre></div>
</div>
<p>Direct Linux boot of PetaLinux 2019.2:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>qemu-system-aarch64<span class="w"> </span>-M<span class="w"> </span>xlnx-versal-virt<span class="w"> </span>-m<span class="w"> </span>2G<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-serial<span class="w"> </span>mon:stdio<span class="w"> </span>-display<span class="w"> </span>none<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-kernel<span class="w"> </span>petalinux-v2019.2/Image<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-append<span class="w"> </span><span class="s2">&quot;rdinit=/sbin/init console=ttyAMA0,115200n8 earlycon=pl011,mmio,0xFF000000,115200n8&quot;</span><span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-net<span class="w"> </span>nic,model<span class="o">=</span>cadence_gem,netdev<span class="o">=</span>net0<span class="w"> </span>-netdev<span class="w"> </span>user,id<span class="o">=</span>net0<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-device<span class="w"> </span>virtio-rng-device,bus<span class="o">=</span>virtio-mmio-bus.0,rng<span class="o">=</span>rng0<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-object<span class="w"> </span>rng-random,filename<span class="o">=</span>/dev/urandom,id<span class="o">=</span>rng0
</pre></div>
</div>
<p>Boot PetaLinux 2019.2 via ARM Trusted Firmware (2018.3 because the 2019.2
version of ATF tries to configure the CCI which we dont model) and U-boot:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>qemu-system-aarch64<span class="w"> </span>-M<span class="w"> </span>xlnx-versal-virt<span class="w"> </span>-m<span class="w"> </span>2G<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-serial<span class="w"> </span>stdio<span class="w"> </span>-display<span class="w"> </span>none<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-device<span class="w"> </span>loader,file<span class="o">=</span>petalinux-v2018.3/bl31.elf,cpu-num<span class="o">=</span><span class="m">0</span><span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-device<span class="w"> </span>loader,file<span class="o">=</span>petalinux-v2019.2/u-boot.elf<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-device<span class="w"> </span>loader,addr<span class="o">=</span>0x20000000,file<span class="o">=</span>petalinux-v2019.2/Image<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-nic<span class="w"> </span>user<span class="w"> </span>-nic<span class="w"> </span>user<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-device<span class="w"> </span>virtio-rng-device,bus<span class="o">=</span>virtio-mmio-bus.0,rng<span class="o">=</span>rng0<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-object<span class="w"> </span>rng-random,filename<span class="o">=</span>/dev/urandom,id<span class="o">=</span>rng0
</pre></div>
</div>
<p>Run the following at the U-Boot prompt:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>Versal&gt;
fdt<span class="w"> </span>addr<span class="w"> </span><span class="nv">$fdtcontroladdr</span>
fdt<span class="w"> </span>move<span class="w"> </span><span class="nv">$fdtcontroladdr</span><span class="w"> </span>0x40000000
fdt<span class="w"> </span><span class="nb">set</span><span class="w"> </span>/timer<span class="w"> </span>clock-frequency<span class="w"> </span>&lt;0x3dfd240&gt;
setenv<span class="w"> </span>bootargs<span class="w"> </span><span class="s2">&quot;rdinit=/sbin/init maxcpus=1 console=ttyAMA0,115200n8 earlycon=pl011,mmio,0xFF000000,115200n8&quot;</span>
booti<span class="w"> </span><span class="m">20000000</span><span class="w"> </span>-<span class="w"> </span><span class="m">40000000</span>
fdt<span class="w"> </span>addr<span class="w"> </span><span class="nv">$fdtcontroladdr</span>
</pre></div>
</div>
<p>Boot Linux as DOM0 on Xen via U-Boot:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>qemu-system-aarch64<span class="w"> </span>-M<span class="w"> </span>xlnx-versal-virt<span class="w"> </span>-m<span class="w"> </span>4G<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-serial<span class="w"> </span>stdio<span class="w"> </span>-display<span class="w"> </span>none<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-device<span class="w"> </span>loader,file<span class="o">=</span>petalinux-v2019.2/u-boot.elf,cpu-num<span class="o">=</span><span class="m">0</span><span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-device<span class="w"> </span>loader,addr<span class="o">=</span>0x30000000,file<span class="o">=</span>linux/2018-04-24/xen<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-device<span class="w"> </span>loader,addr<span class="o">=</span>0x40000000,file<span class="o">=</span>petalinux-v2019.2/Image<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-nic<span class="w"> </span>user<span class="w"> </span>-nic<span class="w"> </span>user<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-device<span class="w"> </span>virtio-rng-device,bus<span class="o">=</span>virtio-mmio-bus.0,rng<span class="o">=</span>rng0<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-object<span class="w"> </span>rng-random,filename<span class="o">=</span>/dev/urandom,id<span class="o">=</span>rng0
</pre></div>
</div>
<p>Run the following at the U-Boot prompt:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>Versal&gt;
fdt<span class="w"> </span>addr<span class="w"> </span><span class="nv">$fdtcontroladdr</span>
fdt<span class="w"> </span>move<span class="w"> </span><span class="nv">$fdtcontroladdr</span><span class="w"> </span>0x20000000
fdt<span class="w"> </span><span class="nb">set</span><span class="w"> </span>/timer<span class="w"> </span>clock-frequency<span class="w"> </span>&lt;0x3dfd240&gt;
fdt<span class="w"> </span><span class="nb">set</span><span class="w"> </span>/chosen<span class="w"> </span>xen,xen-bootargs<span class="w"> </span><span class="s2">&quot;console=dtuart dtuart=/uart@ff000000 dom0_mem=640M bootscrub=0 maxcpus=1 timer_slop=0&quot;</span>
fdt<span class="w"> </span><span class="nb">set</span><span class="w"> </span>/chosen<span class="w"> </span>xen,dom0-bootargs<span class="w"> </span><span class="s2">&quot;rdinit=/sbin/init clk_ignore_unused console=hvc0 maxcpus=1&quot;</span>
fdt<span class="w"> </span>mknode<span class="w"> </span>/chosen<span class="w"> </span>dom0
fdt<span class="w"> </span><span class="nb">set</span><span class="w"> </span>/chosen/dom0<span class="w"> </span>compatible<span class="w"> </span><span class="s2">&quot;xen,multiboot-module&quot;</span>
fdt<span class="w"> </span><span class="nb">set</span><span class="w"> </span>/chosen/dom0<span class="w"> </span>reg<span class="w"> </span>&lt;0x00000000<span class="w"> </span>0x40000000<span class="w"> </span>0x0<span class="w"> </span>0x03100000&gt;
booti<span class="w"> </span><span class="m">30000000</span><span class="w"> </span>-<span class="w"> </span><span class="m">20000000</span>
</pre></div>
</div>
<p>Boot Linux as Dom0 on Xen via ARM Trusted Firmware and U-Boot:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>qemu-system-aarch64<span class="w"> </span>-M<span class="w"> </span>xlnx-versal-virt<span class="w"> </span>-m<span class="w"> </span>4G<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-serial<span class="w"> </span>stdio<span class="w"> </span>-display<span class="w"> </span>none<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-device<span class="w"> </span>loader,file<span class="o">=</span>petalinux-v2018.3/bl31.elf,cpu-num<span class="o">=</span><span class="m">0</span><span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-device<span class="w"> </span>loader,file<span class="o">=</span>petalinux-v2019.2/u-boot.elf<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-device<span class="w"> </span>loader,addr<span class="o">=</span>0x30000000,file<span class="o">=</span>linux/2018-04-24/xen<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-device<span class="w"> </span>loader,addr<span class="o">=</span>0x40000000,file<span class="o">=</span>petalinux-v2019.2/Image<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-nic<span class="w"> </span>user<span class="w"> </span>-nic<span class="w"> </span>user<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-device<span class="w"> </span>virtio-rng-device,bus<span class="o">=</span>virtio-mmio-bus.0,rng<span class="o">=</span>rng0<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-object<span class="w"> </span>rng-random,filename<span class="o">=</span>/dev/urandom,id<span class="o">=</span>rng0
</pre></div>
</div>
<p>Run the following at the U-Boot prompt:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>Versal&gt;
fdt<span class="w"> </span>addr<span class="w"> </span><span class="nv">$fdtcontroladdr</span>
fdt<span class="w"> </span>move<span class="w"> </span><span class="nv">$fdtcontroladdr</span><span class="w"> </span>0x20000000
fdt<span class="w"> </span><span class="nb">set</span><span class="w"> </span>/timer<span class="w"> </span>clock-frequency<span class="w"> </span>&lt;0x3dfd240&gt;
fdt<span class="w"> </span><span class="nb">set</span><span class="w"> </span>/chosen<span class="w"> </span>xen,xen-bootargs<span class="w"> </span><span class="s2">&quot;console=dtuart dtuart=/uart@ff000000 dom0_mem=640M bootscrub=0 maxcpus=1 timer_slop=0&quot;</span>
fdt<span class="w"> </span><span class="nb">set</span><span class="w"> </span>/chosen<span class="w"> </span>xen,dom0-bootargs<span class="w"> </span><span class="s2">&quot;rdinit=/sbin/init clk_ignore_unused console=hvc0 maxcpus=1&quot;</span>
fdt<span class="w"> </span>mknode<span class="w"> </span>/chosen<span class="w"> </span>dom0
fdt<span class="w"> </span><span class="nb">set</span><span class="w"> </span>/chosen/dom0<span class="w"> </span>compatible<span class="w"> </span><span class="s2">&quot;xen,multiboot-module&quot;</span>
fdt<span class="w"> </span><span class="nb">set</span><span class="w"> </span>/chosen/dom0<span class="w"> </span>reg<span class="w"> </span>&lt;0x00000000<span class="w"> </span>0x40000000<span class="w"> </span>0x0<span class="w"> </span>0x03100000&gt;
booti<span class="w"> </span><span class="m">30000000</span><span class="w"> </span>-<span class="w"> </span><span class="m">20000000</span>
</pre></div>
</div>
</section>
<section id="bbram-file-backend">
<h2>BBRAM File Backend<a class="headerlink" href="#bbram-file-backend" title="Link to this heading"></a></h2>
<p>BBRAM can have an optional file backend, which must be a seekable
binary file with a size of 36 bytes or larger. A file with all
binary 0s is a blank.</p>
<p>To add a file-backend for the BBRAM:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>-drive<span class="w"> </span><span class="k">if</span><span class="o">=</span>pflash,index<span class="o">=</span><span class="m">0</span>,file<span class="o">=</span>versal-bbram.bin,format<span class="o">=</span>raw
</pre></div>
</div>
<p>To use a different index value, N, from default of 0, add:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>-global<span class="w"> </span>xlnx,bbram-ctrl.drive-index<span class="o">=</span>N
</pre></div>
</div>
</section>
<section id="efuse-file-backend">
<h2>eFUSE File Backend<a class="headerlink" href="#efuse-file-backend" title="Link to this heading"></a></h2>
<p>eFUSE can have an optional file backend, which must be a seekable
binary file with a size of 3072 bytes or larger. A file with all
binary 0s is a blank.</p>
<p>To add a file-backend for the eFUSE:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>-drive<span class="w"> </span><span class="k">if</span><span class="o">=</span>pflash,index<span class="o">=</span><span class="m">1</span>,file<span class="o">=</span>versal-efuse.bin,format<span class="o">=</span>raw
</pre></div>
</div>
<p>To use a different index value, N, from default of 1, add:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>-global<span class="w"> </span>xlnx,efuse.drive-index<span class="o">=</span>N
</pre></div>
</div>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>In actual physical Versal, BBRAM and eFUSE contain sensitive data.
The QEMU device models do <strong>not</strong> encrypt nor obfuscate any data
when holding them in models memory or when writing them to their
file backends.</p>
<p>Thus, a file backend should be used with caution, and format=luks
is highly recommended (albeit with usage complexity).</p>
<p>Better yet, do not use actual product data when running guest image
on this Xilinx Versal Virt board.</p>
</div>
</section>
<section id="using-canfds-for-versal-virt">
<h2>Using CANFDs for Versal Virt<a class="headerlink" href="#using-canfds-for-versal-virt" title="Link to this heading"></a></h2>
<p>Versal CANFD controller is developed based on SocketCAN and QEMU CAN bus
implementation. Bus connection and socketCAN connection for each CAN module
can be set through command lines.</p>
<p>To connect both CANFD0 and CANFD1 on the same bus:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>-object<span class="w"> </span>can-bus,id<span class="o">=</span>canbus<span class="w"> </span>-machine<span class="w"> </span><span class="nv">canbus0</span><span class="o">=</span>canbus<span class="w"> </span>-machine<span class="w"> </span><span class="nv">canbus1</span><span class="o">=</span>canbus
</pre></div>
</div>
<p>To connect CANFD0 and CANFD1 to separate buses:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>-object<span class="w"> </span>can-bus,id<span class="o">=</span>canbus0<span class="w"> </span>-object<span class="w"> </span>can-bus,id<span class="o">=</span>canbus1<span class="w"> </span><span class="se">\</span>
-machine<span class="w"> </span><span class="nv">canbus0</span><span class="o">=</span>canbus0<span class="w"> </span>-machine<span class="w"> </span><span class="nv">canbus1</span><span class="o">=</span>canbus1
</pre></div>
</div>
<p>The SocketCAN interface can connect to a Physical or a Virtual CAN interfaces on
the host machine. Please check this document to learn about CAN interface on
Linux: docs/system/devices/can.rst</p>
<p>To connect CANFD0 and CANFD1 to host machines CAN interface can0:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>-object<span class="w"> </span>can-bus,id<span class="o">=</span>canbus<span class="w"> </span>-machine<span class="w"> </span><span class="nv">canbus0</span><span class="o">=</span>canbus<span class="w"> </span>-machine<span class="w"> </span><span class="nv">canbus1</span><span class="o">=</span>canbus
-object<span class="w"> </span>can-host-socketcan,id<span class="o">=</span>canhost0,if<span class="o">=</span>can0,canbus<span class="o">=</span>canbus
</pre></div>
</div>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="virt.html" class="btn btn-neutral float-left" title="virt generic virtual platform (virt)" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="xenpvh.html" class="btn btn-neutral float-right" title="Xen Device Emulation Backend (xenpvh)" 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>