android-vshell运行aarch64 QEMU虚拟机提示固件大小超限如何解决?
问题原因
你推测的架构识别错误是正确的,该问题不属于虚拟机配置错误,是android-vshell自带QEMU的适配缺陷:QEMU默认对x86/i386架构的固件大小限制为8MB,aarch64 virt机型的默认限制为128MB,你使用的android-vshell自定义补丁没有针对aarch64架构单独配置固件大小阈值,错误统一套用了x86的8MB限制,才会触发64MB固件超容的报错。
修复方案
方案1:无需重新编译QEMU的临时适配方案
- 替换现有64MB的pflash固件,使用裁剪后总大小不超过8MB的aarch64最小UEFI固件,也可以直接裁剪现有固件(仅适用于固件后半段为空白区域的场景):
qemu-img resize flash0.img 4M qemu-img resize flash1.img 4M
- 调整启动参数,和Mac端配置对齐,避免架构识别混乱:
- 把
-cpu max改为-cpu cortex-a57 - 删除重复的网络配置项
-nic user,避免和后续的netdev配置冲突
- 把
- 修改完成后直接启动即可,不需要调整磁盘镜像配置。
方案2:源码补丁永久修复
如果需要保留64MB的pflash固件功能,给android-vshell的QEMU源码添加以下补丁即可:
- 找到源码目录下
hw/arm/virt.c文件 - 定位到
virt_machine_class_init函数,修改max_fw_size配置为128MB:
mc->max_fw_size = 128 * 1024 * 1024;
- 重新编译QEMU替换android-vshell的内置二进制文件即可。
验证步骤
修复完成后先用最小参数测试启动,确认无报错后再添加其他自定义参数:
qemu-system-aarch64 -machine virt -m 512M -cpu cortex-a57 -drive file=disk-0.qcow2,if=virtio -drive file=flash0.img,if=pflash -drive file=flash1.img,if=pflash -nographic
内容的提问来源于stack exchange,提问作者4ntoine
相关产品推荐
相关产品推荐

