内容提要
本文介绍在M1 Mac上自行编译QEMU以运行Linux镜像:brew安装的QEMU不支持M1,需使用QEMU 6.0并打上Alexander Graf的hvf补丁,安装ninja、glib等依赖后配置编译aarch64-softmmu并安装;随后给出启动Ubuntu Server 20.04 ARM64虚拟机的脚本,并建议使用gcc-11、检查hvf支持以便调试。
延伸解读
为什么需要自行编译 QEMU
文章指出,截至2021年8月,直接用 brew 安装的 QEMU 无法在 M1 Mac 上正常工作。作者选择自行编译 QEMU 6.0,并打上 Alexander Graf 的 hvf 补丁 v8。虽然 QEMU 主分支已合并部分 hvf 补丁,但对 Apple Silicon 的支持仍不完整。因此,若要在 M1 上获得可用的虚拟化加速,自行打补丁编译是当时的必要步骤。
编译配置的关键变化
与早期博客不同,作者强调配置时只需指定 --target-list=aarch64-softmmu,不要额外添加 --enable-hvf 或 --disable-gnutls。这说明随着 QEMU 版本和补丁的演进,编译选项已经简化。读者在参照旧教程时需留意这一差异,避免因多余参数导致配置失败或功能异常。
启动脚本中的实用细节
作者提供的启动脚本使用 -accel hvf 启用硬件加速,并指定 cortex-a57 CPU 与 virt 机器类型。脚本还通过 pflash 加载 edk2 固件、使用 virtio 设备提升磁盘和网络性能,并以 telnet 串口和 stdio 监视器方便调试。这些配置反映了在 M1 上运行 ARM64 Linux 虚拟机时,固件、加速器和设备模型的搭配方式。
调试与排错建议
文章建议使用 gcc-11 而非 Apple clang 进行编译,但作者本人用 clang 也成功完成构建。配置阶段应留意自动配置输出的功能启用/禁用信息。若怀疑 hvf 支持有问题,可用 qemu-system-aarch64 -accel help 检查。这些提示有助于读者在编译或运行阶段快速定位补丁是否生效、加速是否可用。
Q&A
为什么在M1 Mac上不能直接用brew安装的QEMU?
截至2021年8月,brew安装的QEMU不支持M1 macOS,因为QEMU尚未完全支持Apple Silicon的Hypervisor框架(hvf),需要自行编译并打补丁。
在M1 Mac上编译QEMU需要哪些依赖和步骤?
需要安装ninja、pkgconfig、glib、pixman等依赖(brew install ninja pkgconfig glib pixman),然后克隆QEMU仓库,检出6.0.0版本,打上Alexander Graf的hvf补丁,配置时指定--target-list=aarch64-softmmu,最后编译并安装。
如何给QEMU打补丁以支持M1的hvf?
使用Alexander Graf的补丁v8,通过命令:curl https://patchew.org/QEMU/20210519202253.76782-1-agraf@csgraf.de/mbox | git am 来应用补丁。
在M1 Mac上运行Ubuntu Server 20.04 ARM64的QEMU启动命令是什么?
启动脚本包括:qemu-system-aarch64 -accel hvf -m 2048 -cpu cortex-a57 -M virt,highmem=off -drive file=/usr/local/share/qemu/edk2-aarch64-code.fd,if=pflash,format=raw,readonly=on -drive file=ovmf_vars.fd,if=pflash,format=raw -serial telnet::4444,server,nowait -drive if=none,file=disk.qcow2,format=qcow2,id=hd0 -device virtio-blk-device,drive=hd0,serial="dummyserial" -device virtio-net-device,netdev=net0 -netdev user,id=net0 -vga none -device ramfb -cdrom ubuntu-20.04.2-live-server-arm64.iso -device usb-ehci -device usb-kbd -device usb-mouse -usb -monitor stdio。
编译QEMU时有哪些调试技巧或注意事项?
建议使用gcc-11而非Apple clang(但用clang也能成功编译);注意自动配置的输出,检查特性是否启用;使用qemu-system-aarch64 -accel help检查hvf支持,若不支持则补丁可能有问题。
QEMU 6.0在M1 Mac上对hvf的支持情况如何?
QEMU主分支已合并一些hvf补丁,但仍未完全支持Apple Silicon,因此需要使用QEMU 6.0并打上Alexander Graf的补丁v8才能启用hvf加速。