You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Arm64交叉编译Android QEMU模拟器启动崩溃问题求助

针对M1 Max Ubuntu环境Arm Android模拟器启动段错误的排查与修复

核心问题定位

kvm_user_backed_ram_map: error registering slot: Invalid argument 错误本质是KVM在Apple Silicon的Arm64 Ubuntu环境下的内存映射兼容性问题——你在x86机器交叉编译的模拟器未适配本地KVM的实现细节,这是导致段错误的核心原因。

分步修复方案

1. 放弃交叉编译,直接在Arm64 Ubuntu本机编译模拟器

Apple Silicon的Ubuntu属于原生Arm64架构,交叉编译的模拟器会缺失对本地KVM的适配,直接在本机编译:

  • 先安装编译依赖:
    sudo apt install git build-essential cmake ninja-build libssl-dev libxcb1-dev libx11-dev libxrandr-dev libxi-dev libgl1-mesa-dev libglu1-mesa-dev
    
  • 拉取Android模拟器稳定分支源码:
    repo init -u https://android.googlesource.com/platform/manifest -b emulator-33.1.14
    repo sync -j$(nproc)
    
  • 编译Arm64目标的模拟器:
    cd external/qemu
    ./android/configure.sh --target-list=aarch64-linux-user,aarch64-softmmu
    make -j$(nproc)
    
  • 将编译生成的模拟器二进制文件替换到Android SDK的emulator目录下。

2. 检查并修复KVM配置

  • 确认KVM模块已加载:
    lsmod | grep kvm
    
    若未加载,执行sudo modprobe kvm-arm64手动加载。
  • 确保当前用户拥有KVM权限:
    sudo usermod -aG kvm $USER
    
    注销后重新登录生效。
  • 调整KVM内存映射参数:
    编辑/etc/modprobe.d/kvm.conf,添加:
    options kvm-arm64 allow_smaller_max_pfn=1
    
    然后重新加载模块:sudo modprobe -r kvm-arm64 && sudo modprobe kvm-arm64

3. 调整AVD配置避免资源过载

  • 创建纯Arm64架构的AVD,避免混合x86组件:
    avdmanager create avd -n ArmEmulator -k "system-images;android-33;google_apis;arm64-v8a"
    
  • 修改AVD配置文件(路径:~/.android/avd/ArmEmulator.avd/config.ini),添加以下参数限制资源:
    hw.cpu.ncore=2
    hw.ramSize=2048
    qemu.cpu.maxcpus=2
    qemu.heap_size=512
    

4. 验证系统环境兼容性

  • 检查内核版本,建议使用5.15及以上的官方Arm64内核:
    uname -r
    
    版本过低则执行sudo apt update && sudo apt upgrade linux-image-generic升级。
  • 确认lscpu输出中Architecture为aarch64、Virtualization为kvm,确保硬件虚拟化已正常启用。

测试启动

完成配置后,启动模拟器验证:

emulator -avd ArmEmulator -verbose

若仍报错,重点关注日志中KVM初始化阶段的新报错信息。

内容的提问来源于stack exchange,提问作者Joss Horn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 17:00:55