virtual-machine - 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 我显示了固件:
该软件包提供以下消息:
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 可能会触发此问题,并且我看不到pflash
除loader
标签之外的任何其他相关提及。
删除 UEFI
现有的 QEMU 命令甚至不使用 UEFI(我还用 再次检查了/sys/firmware/efi
它,它不存在),所以我尝试将其删除。当我删除loader
标签时,我得到unsupported configuration: ACPI requires UEFI on this architecture
. 当我删除<acpi/>
(以及之前的更改)时,我得到qemu-system-aarch64: Property '.acpi' not found
.
解决方案
推荐阅读
- reactjs - 在条件 HTML 链接上反应意外的令牌
- compilation - “内存中二进制内存映像”是什么意思?
- windows - 无法从 echo $PATH 中删除路径
- c++ - 为什么在 Main 中正常运行的代码在函数内部运行不正确?(C++)
- c++ - C++ 中的适配器模式返回分段错误
- mongodb - WSo2 tls 连接到 mongodb 数据服务
- java - slf4j 找不到 log4j2 jar
- vue.js - 如何在vue组件的样式标签中添加if
- discord.js - 我正在尝试发出命令来显示不和谐机器人在多少台服务器上,但得到错误“消息未定义”
- apache-kafka - Kafka Manager - 需要跟踪使用它的用户以确保安全