使用 QEMU 在 M1 Macbook 上运行 Linux 镜像

使用 QEMU 在 M1 Macbook 上运行 Linux 镜像

💡 原文中文,约2900字,阅读约需7分钟。
📝

内容提要

在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。

🏷️

标签

➡️

继续阅读