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 firmware list

该软件包给出以下消息:

 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's UEFI aarch64 package,但遇到了同样的问题:

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可以触发此问题,除{{1}之外,我看不到其他pflash的相关提及}}标签

删除UEFI

现有的QEMU命令甚至都没有使用UEFI(我也用loader进行了检查,它不存在),所以我尝试将其删除删除/sys/firmware/efi标记后,我得到loader。 当我删除unsupported configuration: ACPI requires UEFI on this architecture(以及之前的更改)时,我得到<acpi/>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)