问题描述
目标
我目前正在尝试使用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'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 (将#修改为@)