arm64架构树莓派4通过QEMU虚拟化Android遇根文件系统挂载报错求助
解决方案
核心问题原因
从报错日志可见内核未识别到任何挂载的块设备,可用存储仅为ramdisk分区,因此你尝试的所有root路径配置均无法生效,对应解决步骤如下:
- 补全内核virtio设备驱动
你编译的generic_arm64内核默认未开启virtio块设备支持,需回到编译环境修改内核配置,开启以下选项后重新编译内核:
- 补全内核virtio设备驱动
CONFIG_VIRTIO=y CONFIG_VIRTIO_PCI=y CONFIG_VIRTIO_BLK=y CONFIG_VIRTIO_MMIO=y
如果将上述选项编译为模块,需将对应模块打包进initramfs后再启动。
- 修正QEMU磁盘挂载参数
原有-drive参数未指定存储接口,QEMU默认挂载为非virtio接口导致内核无法识别,需显式指定if=virtio参数,同时补充ramdisk加载配置:Android系统启动依赖ramdisk完成初始化,不可直接将system.img作为根分区挂载,需将编译生成的ramdisk.img同步传输到树莓派对应目录。
- 修正QEMU磁盘挂载参数
- 修正内核启动参数
- 补充串口输出配置
console=ttyAMA0确保日志正常输出 - 确认system.img文件系统格式:在编译主机执行
file system.img查询实际格式,将rootfstype参数对应修改为ext4或erofs - 确认system.img分区结构:执行
fdisk -l system.img确认是否存在分区表,无分区表则root参数写/dev/vda,存在分区表则对应根分区序号写/dev/vdaX
参考启动命令
qemu-system-aarch64 \ -M virt,accel=kvm -cpu host -smp 4 -m 4G \ -no-reboot -serial stdio \ -kernel kernel-5.4 \ -initrd ramdisk.img \ -append "console=ttyAMA0 root=/dev/vda rootfstype=erofs rw panic=1 loglevel=8" \ -drive file=system.img,format=raw,if=virtio \ -device virtio-gpu-pci \ -device virtio-tablet-pci
可选验证步骤
若仍挂载失败,可在内核启动参数中添加init=/bin/sh进入临时shell,执行ls /dev查看是否存在vda相关设备,确认块设备识别状态后再调整配置。
内容的提问来源于stack exchange,提问作者Hal
相关产品推荐
相关产品推荐

