首页 > 解决方案 > libvirt qemu-system-aarch64:找不到属性“.pflash0”

问题描述

目标

我目前正在尝试使用 QEMU 和 libvirt(在 Arch 上)模拟 Raspberry Pi 3。我(大部分)遵循dhruvvyas90/qemu-rpi-kernel's native guide

只是为了有一个开始(工作)的地方来扩展,我正在使用以下运行良好的

#!/bin/bash

sudo qemu-system-aarch64 \
  -m 1G \
  -smp 4 \
  -M raspi3 \
  -dtb "/.../bcm2710-rpi-3-b-plus.dtb" \
  -kernel "/.../kernel8.img" \
  -append "rw earlyprintk loglevel=8 console=ttyAMA0,115200 dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootdelay=1" \
  -sd "/.../image.qcow2" \
  -usb -device usb-mouse -device usb-kbd \
  -serial stdio

现在我正在尝试将它添加到 libvirt。我有以下 XML(其中还包括 QEMU 命令的一些额外内容)

<domain type="qemu">
  <name>rpi3</name>
  <uuid>...</uuid>
  <metadata>
    <libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
      <libosinfo:os id="http://debian.org/debian/10"/>
    </libosinfo:libosinfo>
  </metadata>
  <memory>2097152</memory>
  <currentMemory>2097152</currentMemory>
  <vcpu>4</vcpu>
  <os>
    <type arch="aarch64" machine="raspi3">hvm</type>
    <kernel>/.../kernel8.img</kernel>
    <cmdline>rw earlyprintk loglevel=8 console=ttyAMA0,115200 dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootdelay=1</cmdline>
    <dtb>/.../bcm2710-rpi-3-b-plus.dtb</dtb>
    <loader readonly="yes" type="pflash">/usr/share/AAVMF/AAVMF_CODE.fd</loader>
  </os>
  <features>
    <acpi/>
  </features>
  <clock offset="utc"/>
  <devices>
    <emulator>/usr/bin/qemu-system-aarch64</emulator>
    <disk type="file" device="disk">
      <driver name="qemu" type="qcow2"/>
      <source file="/.../image.qcow2"/>
      <target dev="sda" bus="sd"/>
    </disk>
    <interface type="network">
      <source network="default"/>
      <mac address="..."/>
    </interface>
    <console type="pty"/>
    <input type="mouse" bus="usb"/>
    <input type="keyboard" bus="usb"/>
    <redirdev bus="usb" type="spicevmc"/>
    <graphics type="spice" port="-1" tlsPort="-1" autoport="yes">
      <gl enable="no"/>
      <image compression="off"/>
    </graphics>
    <video>
      <model type="qxl"/>
    </video>
    <controller type="usb" model="qemu-xhci" ports="15"/>
  </devices>
</domain>

当我尝试使用 virt-manager 添加它时,我得到qemu-system-aarch64: Property '.pflash0' not found.

virt-install

我使用以下内容生成 XML(我检查了每个标志,virt-install --help并尝试按顺序从原始 QEMU 命令映射它们):

sudo virt-install \
  --connect qemu:///system \
  --name rpi3 \
  --memory 2048 \
  --vcpus 4 \
  --import \
  --boot \
    "dtb=/.../bcm2710-rpi-3-b-plus.dtb,\
kernel=/.../kernel8.img,\
kernel_args=rw earlyprintk loglevel=8 console=ttyAMA0,115200 dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootdelay=1" \
  --os-variant debian10 \
  --disk "/.../image.qcow2,bus=virtio" \
  `# --input mouse,bus=usb` \
  `# --input keyboard,bus=usb` \
  `# --serial stdio` \
  --video qxl \
  --virt-type qemu \
  --arch aarch64 \
  --machine raspi3 \
  --print-xml \
  --check path_in_use=off

检查 UEFI 固件文件和相关配置

这是在使用edk2-avmf AUR时。安装它后,重新启动 libvirtd 并检查 virt-manager 我显示了固件:

edk2-avmf 固件列表

该软件包提供以下消息:

 1. Uncomment or add/edit these lines in /etc/libvirt/qemu.conf 
 
 nvram = [ 
 "/usr/share/AAVMF/AAVMF_CODE.fd:/usr/share/AAVMF/AAVMF_VARS.fd" 
 "/usr/share/AAVMF/AAVMF32_CODE.fd:/usr/share/AAVMF/AAVMF32_VARS.fd" 
 ]
 2. systemctl restart libvirtd

当我这样做(在第 2 行添加尾随逗号)并重新启动时,libvirtd 无法启动。地位:

Nov 05 13:13:02 ... systemd[1]: libvirtd.service: Unit process 788 (dnsmasq) remains running after unit stopped.
Nov 05 13:13:02 ... systemd[1]: libvirtd.service: Unit process 818 (dnsmasq) remains running after unit stopped.
Nov 05 13:13:02 ... systemd[1]: libvirtd.service: Unit process 819 (dnsmasq) remains running after unit stopped.
Nov 05 13:13:02 ... systemd[1]: libvirtd.service: Start request repeated too quickly.
Nov 05 13:13:02 ... systemd[1]: libvirtd.service: Failed with result 'start-limit-hit'.
Nov 05 13:13:02 ... systemd[1]: libvirtd.service: Unit process 787 (dnsmasq) remains running after unit stopped.
Nov 05 13:13:02 ... systemd[1]: libvirtd.service: Unit process 788 (dnsmasq) remains running after unit stopped.
Nov 05 13:13:02 ... systemd[1]: libvirtd.service: Unit process 818 (dnsmasq) remains running after unit stopped.
Nov 05 13:13:02 ... systemd[1]: libvirtd.service: Unit process 819 (dnsmasq) remains running after unit stopped.
Nov 05 13:13:02 ... systemd[1]: Failed to start Virtualization daemon.

当我不包含尾随逗号(如消息所示)时,我会遇到同样的问题,但会出现配置解析错误:

Nov 05 13:16:10 ... libvirtd[86519]: hostname: ...
Nov 05 13:16:10 ... libvirtd[86519]: Cannot find 'dmidecode' in path: No such file or directory
Nov 05 13:16:10 ... libvirtd[86519]: configuration file syntax error: /etc/libvirt/qemu.conf:770: expecting a value
Nov 05 13:16:10 ... libvirtd[86519]: Initialisation of QEMU state driver failed: configuration file syntax error: /etc/libvirt/qemu.conf:770: expecting a value
Nov 05 13:16:10 ... libvirtd[86519]: Driver state initialisation failed
Nov 05 13:16:10 ... systemd[1]: libvirtd.service: Succeeded.
Nov 05 13:16:10 ... systemd[1]: libvirtd.service: Unit process 787 (dnsmasq) remains running after unit stopped.
Nov 05 13:16:10 ... systemd[1]: libvirtd.service: Unit process 788 (dnsmasq) remains running after unit stopped.
Nov 05 13:16:10 ... systemd[1]: libvirtd.service: Unit process 818 (dnsmasq) remains running after unit stopped.
Nov 05 13:16:10 ... systemd[1]: libvirtd.service: Unit process 819 (dnsmasq) remains running after unit stopped.

我还制作了自己的软件包,只安装了Debian 的 UEFI aarch64 软件包,我遇到了同样的问题:

pkgname=qemu-efi-aarch64
pkgver=20181115.85588389
pkgrel=1
pkgdesc="A build of EDK II for 64-bit ARM virtual machines"
conflicts=("edk2-avmf")
arch=("any")
url="https://packages.debian.org/buster/qemu-efi-aarch64"
source=("http://ftp.<region>.debian.org/debian/pool/main/e/edk2/qemu-efi-aarch64_0~20181115.85588389-3+deb10u1_all.deb")
sha256sums=("08156f2b483958ea0cf3058adacb6ac2b70314d9825ccfe5e431e688024b7200")
package() {
    tar -xf data.tar.xz -C "${pkgdir}"
}

考虑 XML 问题

该错误表明 XML 文件中缺少一个项目,但没有手动 XML 编辑的 virt-manager 可能会触发此问题,并且我看不到pflashloader标签之外的任何其他相关提及。

删除 UEFI

现有的 QEMU 命令甚至不使用 UEFI(我还用 再次检查了/sys/firmware/efi它,它不存在),所以我尝试将其删除。当我删除loader标签时,我得到unsupported configuration: ACPI requires UEFI on this architecture. 当我删除<acpi/>(以及之前的更改)时,我得到qemu-system-aarch64: Property '.acpi' not found.

标签: virtual-machineqemulibvirtuefi

解决方案


推荐阅读