ARM64设备启用KVM后启动Cuttlefish遇qemu初始化失败问题
问题描述
在ARM64架构的Linux设备上已成功集成QEMU 4.2.1,尝试启动Cuttlefish虚拟机时出现错误:qemu-system-aarch64: kvm_init_vcpu failed: Invalid argument,设备已启用KVM且/dev/kvm权限正常,相关信息如下:
QEMU版本信息:
$ qemu-system-aarch64 --version QEMU emulator version 4.2.1 Copyright (c) 2003-2019 Fabrice Bellard and the QEMU Project developers
/dev/kvm权限:
$ ls -l /dev/kvm crw-rw-rw- 1 root kvm 10, 232 Nov 23 15:43 /dev/kvm
错误日志片段:
/usr/bin/qemu-system-aarch64
2023-11-20T22:27:38.422646Z qemu-system-aarch64: kvm_init_vcpu failed: Invalid argument
Detected unexpected exit of monitored subprocess /usr/bin/qemu-system-aarch64
Subprocess /usr/bin/qemu-system-aarch64 (2336) has exited with exit code 1
failed to read from socket, retry.
failed to read from socket, retry.
Start modem simulator, server_fds: 64, Sim type: normal
Server listening on 0.0.0.0:7200
Metrics started
Metrics host received: VMStart
排查与解决方案
- 升级QEMU版本:QEMU 4.2.1版本较老,存在部分KVM兼容性问题,Cuttlefish对QEMU版本有一定要求。建议升级到6.x或7.x系列的稳定版。Debian/Ubuntu系可通过包管理器安装:
sudo apt update && sudo apt install qemu-system-aarch64 - 检查CPU虚拟化支持:ARM64架构下,KVM运行需要CPU支持EL2虚拟化扩展。执行命令验证:
若输出无相关虚拟化标识,需确认设备硬件是否支持,或进入BIOS/固件设置开启虚拟化选项。grep -i virt /proc/cpuinfo - 调整Cuttlefish启动参数:可能是启动时指定了不兼容的CPU模型。尝试修改Cuttlefish配置,使用
cortex-a57这类通用兼容的CPU型号,或使用host参数让QEMU直接使用主机CPU特性(需硬件支持)。 - 升级内核版本:过老的Linux内核可能与QEMU 4.2.1的KVM交互存在BUG。执行
uname -r查看内核版本,建议升级到5.4以上的LTS版本。 - 检查SELinux限制:即使
/dev/kvm权限正常,SELinux可能阻止QEMU的操作。临时关闭SELinux测试:
若启动成功,需添加SELinux规则允许QEMU的KVM操作,避免后续重启后问题重现。sudo setenforce 0
内容的提问来源于stack exchange,提问作者GNK
相关产品推荐
相关产品推荐

