内容提要
在M1 Mac上搭建Linux内核开发环境时,由于brew安装的QEMU不支持Apple Silicon,需自行编译QEMU 6.0并应用Alexander Graf的hvf补丁,使用gcc-11构建aarch64-softmmu目标。安装后即可通过qemu-system-aarch64配合hvf加速运行Ubuntu Server等Linux镜像。
延伸解读
为何需要自行编译 QEMU
文章指出,截至2021年8月,通过 Homebrew 安装的 QEMU 在 M1 Mac 上无法直接使用,因为官方版本尚未完全支持 Apple Silicon 的虚拟化框架(hvf)。作者选择自行编译 QEMU 6.0 并应用 Alexander Graf 的补丁 v8,以启用 hvf 加速。这反映了当时软件生态对 Apple Silicon 的适配滞后,用户需手动解决兼容性问题。
构建过程中的关键步骤
构建 QEMU 需先安装依赖(ninja、pkgconfig、glib、pixman),然后从 GitHub 克隆源码并检出到 6.0.0 版本,再通过 curl 获取补丁并用 git am 应用。配置时仅指定 --target-list=aarch64-softmmu,无需添加 --enable-hvf 或 --disable-gnutls。作者建议使用 gcc-11 而非 Apple clang,但表示 clang 也能成功构建。
运行 Linux 镜像的配置要点
文章提供了一个运行 Ubuntu Server 20.04 (aarch64) 的脚本示例,其中使用 -accel hvf 启用加速,-cpu cortex-a57 指定 CPU 模型,-M virt,highmem=off 设置机器类型,并加载 edk2 固件。脚本还配置了 virtio 磁盘和网络设备,以及串口和显示选项。这为读者提供了可直接参考的 QEMU 启动参数模板。
调试与验证建议
作者在调试技巧中强调,可通过 qemu-system-aarch64 -accel help 检查 QEMU 是否支持 hvf,若不支持则说明补丁应用有问题。此外,建议关注 configure 阶段的功能启用/禁用信息,以确认构建选项是否正确。这些步骤有助于读者在遇到问题时快速定位原因,避免盲目尝试。
Q&A
为什么在 M1 Mac 上不能直接用 brew install qemu 安装 QEMU?
因为截至2021年8月,brew 安装的 QEMU 不支持 Apple Silicon,无法在 M1 Mac 上原生运行。
在 M1 Mac 上编译 QEMU 需要应用哪个补丁?
需要应用 Alexander Graf 编写的 hvf 补丁 v8,该补丁提供了对 Apple Silicon 虚拟化框架的支持。
编译 QEMU 时应该使用什么构建配置参数?
使用 ../configure --target-list=aarch64-softmmu,不要添加 --enable-hvf 或 --disable-gnutls。
如何验证 QEMU 是否支持 hvf 加速?
运行 qemu-system-aarch64 -accel help,如果输出中包含 hvf,则说明支持。
运行 Ubuntu Server 的 QEMU 命令中如何启用 hvf 加速?
在 qemu-system-aarch64 命令中添加 -accel hvf 参数即可启用 hvf 加速。
编译 QEMU 时推荐使用哪个编译器?
建议使用 gcc-11 而不是 Apple clang (cc),但作者也成功用 Apple clang 构建了 QEMU。