在 macOS 14 (M1 Pro) 编译 QEMU 7.0.0
Contents
前提
最近我在进行清华大学 rCore Tutorial 的实验。该实验的内容是用 Rust 编写一个运行在 RISC-V 上的操作系统,因此需要使用 QEMU 来模拟 RISC-V 环境。
但是,讲义里采用的环境是 Ubuntu x86 架构,而我打算在我的 MacBook Pro (M1 Pro) 上进行实验,所以就有了本教程。
本教程的系统环境是 macOS Sonoma 14.5 Beta (23F5049f),编译安装的是 QEMU 7.0.0。
1. 配置编译环境 && 获取源代码
首先需要确保电脑上安装了 Homebrew 包管理器,如果没有安装的话,参考官网安装。
安装依赖包,获取 QEMU 源代码并进行配置:
|
|
2. 切换系统 SDK 到旧版本
直接在 macOS 14 上编译会遇到如下报错:
|
|
错误原因是 QEMU 7 源码里面用到的一些系统 API 在 macOS 14 中被 Apple 弃用了,因此我们需要将系统 SDK 切换为更旧的版本来进行编译。
首先进入 SDK 的目录查看当前系统里有哪些版本的 SDK:
|
|
经过测试,MacOS13.sdk
是可以成功编译的。由于我的电脑是从 macOS 13 升级上来的,因此自带 MacOS13.sdk
。如果没有的话需要自行搜索如何获得旧版本的 SDK。获得后将其解压到这个目录即可。
配置临时环境变量切换旧版本 SDK:
|
|
如果有特殊的需要,也可以将上面的代码添加到 .zshrc
文件来长时间生效。不过一般不建议这么做。
3. 编译 QEMU
切换到刚才的 qemu-7.0.0
目录,进行编译:
|
|
注意不能新建终端,不然上面配置的临时变量就会失效。
可以成功编译。编译出来的文件在 ./build
文件夹下。将其添加到 PATH
环境变量中,即可使用。
结束
最终效果如下: