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

在QEMU模拟的树莓派OS中编译Android Cuttlefish时执行二进制文件报错

解决Arm64树莓派OS虚拟机中Android Cuttlefish编译的二进制格式错误问题

问题场景

在Ubuntu 24.04 x64系统上,通过QEMU模拟Arm64架构的Debian Bookworm树莓派OS,尝试编译并启动Android 13 Cuttlefish。使用的QEMU启动参数:

qemu-system-aarch64 -machine virt-9.0,virtualization=on,gic_version=3 -cpu max \
-smp 8 -m 8G -kernel /mnt/zroot-133/zroot-133/A_FILES/OS/Linux/RaspiOS/Image \
-append "root=/dev/vda2 rootfstype=ext4 rw panic=0 console=ttyAMA0 kvm-arm.mode=nested" \
-drive format=raw,file=/mnt/zroot-133/zroot-133/A_FILES/OS/Linux/RaspiOS/2024-07-04-raspios-bookworm-arm64-big.img,if=none,id=hd0 \
-device virtio-blk,drive=hd0,bootindex=0 \
-netdev tap,id=mynet0,ifname=tap0,script=no,downscript=no \
-device virtio-net-pci,netdev=mynet0,mac=52:55:00:d1:55:01 -device usb-ehci \
-device usb-kbd -device virtio-tablet-pci -usb -device virtio-serial-pci \
-spice port=5930,disable-ticketing=on \
-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 \
-chardev spicevmc,id=spicechannel0,name=vdagent -display spice-app &

参考Android 12的教程调整后,在主机上执行了同步命令:

repo init -u https://android.googlesource.com/platform/manifest -b android-13.0.0_r6
repo sync -c
source build/envsetup.sh
lunch aosp_cf_arm64_phone-userdebug
m

将编译目录挂载到树莓派OS虚拟机内,执行以下命令时出错:

pi@raspberrypi:/mnt/droplet/mnt/zroot-133/zroot-133/A_FILES/OS/Android/2net-co-uk/aosp_cf_arm64_phone-userdebug $ source build/envsetup
pi@raspberrypi:/mnt/droplet/mnt/zroot-133/zroot-133/A_FILES/OS/Android/2net-co-uk/aosp_cf_arm64_phone-userdebug $ lunch aosp_cf_arm64_phone-userdebug

错误信息:

/mnt/droplet/mnt/zroot-133/zroot-133/A_FILES/OS/Android/2net-co-uk/aosp_cf_arm64_phone-userdebug/build/blueprint/microfactory/microfactory.bash: riga 62:
/mnt/droplet/mnt/zroot-133/zroot-133/A_FILES/OS/Android/2net-co-uk/aosp_cf_arm64_phone-userdebug/out/microfactory_Linux: cannot execute binary file: exe Format not valid

已确认虚拟机为Arm64架构:

pi@raspberrypi:/mnt/droplet/mnt/zroot-133/zroot-133/A_FILES/OS/Android/2net-co-uk/aosp_cf_arm64_phone-userdebug/out/target/product $ ls
vsoc_arm64

问题原因

microfactory_Linux是在x64主机上编译生成的x86_64架构二进制文件,无法在Arm64架构的树莓派OS虚拟机中运行。Android编译过程中会先构建microfactory这类辅助工具,这些工具的架构与编译主机一致,而非目标架构。

解决方案

1. 清理主机生成的x86架构文件

在虚拟机内的Android源码目录中,清理所有主机生成的文件:

cd /mnt/droplet/mnt/zroot-133/zroot-133/A_FILES/OS/Android/2net-co-uk/aosp_cf_arm64_phone-userdebug
make clean
rm -rf out/

2. 在Arm64虚拟机内完整编译

先安装Android 13编译所需的依赖:

sudo apt update
sudo apt install openjdk-11-jdk git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig

再重新执行编译流程:

source build/envsetup.sh
lunch aosp_cf_arm64_phone-userdebug
m -j$(nproc)

3. 确认QEMU嵌套虚拟化正常工作

Cuttlefish依赖KVM,检查虚拟机内是否启用嵌套虚拟化:

grep -c kvm /proc/cpuinfo

输出大于0则表示KVM已启用。若未生效,需确认QEMU启动参数中的kvm-arm.mode=nested配置正确,且主机CPU支持ARM嵌套虚拟化(如AMD Ryzen 5000+/Intel 11代及以上)。

4. 启动Cuttlefish

编译完成后,执行以下命令启动:

launch_cvd

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 18:53:19