3步在Apple Silicon Mac上部署Asahi Linux双启动:完整入门指南
【免费下载链接】docsAsahi Linux documentation项目地址: https://gitcode.com/gh_mirrors/docs157/docs
Asahi Linux 是面向 Apple Silicon Mac 的开源 Linux 项目,让 M1、M2 等机器同时运行 macOS 与 Linux。本教程面向新手,用 3 步带你完成 macOS 与 Asahi Linux 双启动部署:调整分区布局、降低启动安全级别、安装 m1n1 引导程序,文末附验证方法与常见坑速查表。
📦 项目简介:Asahi Linux 双启动适合谁
Asahi Linux 的目标是让 Linux 直接跑在 Apple 自研芯片上,而不是靠转译层模拟。部署完成后,你的 Mac 会在开机时提供两个入口:一个是你熟悉的 macOS,一个是 Linux 引导链的起点 m1n1。
这套方案对你有什么用:
- 一台机器两种系统,开发调试用 Linux,日常办公继续用 macOS,互不占用内存
- 不破坏原有 macOS 安装,出问题可以退回原来的系统
- 掌握 m1n1、stub 分区、安全策略这些概念,后续跟进 Asahi 社区进展不费劲
- 官方文档明确说明此流程面向内核开发者,流程稳定、每一步都有文档背书,适合想深入理解 Apple Silicon 启动机制的人
✅ 环境自检:动手前逐项核对
开始之前,对照下表检查你的环境和工具是否就绪。
| 检查项 | 要求 | 必需/可选 |
|---|---|---|
| 硬件 | Apple M1 芯片的 Mac,推荐 Mac mini(外接 HDMI 显示器),MacBook Air/Pro 也可 | 必需 |
| macOS 版本 | 11.2 或更高,且已完成首次设置、有管理员账号 | 必需 |
| FileVault | 磁盘加密必须处于关闭状态 | 必需 |
| 磁盘空间 | 至少 80GB 可腾出空间给 Linux 分区 | 必需 |
| Linux 开发机 | 任意架构一台;非 arm64 需装 aarch64 交叉编译工具链 | 必需 |
| 串口或 USB 调试方案 | 用于查看 m1n1 输出、快速重启测试机 | 可选(强烈推荐) |
| 数据备份 | 用 Time Machine 等方式备份重要数据 | 必需(强烈建议) |
🛠️ 操作流程:3步完成双启动部署
第1步:调整分区布局,为Linux分区腾空间
目标:把 macOS 容器缩小,在旁边新建一个名为 "Linux" 的 APFS 分区和 FAT32 引导分区。原因:Apple Silicon 的启动链要求每个 OS 有独立的 APFS 容器,"Linux" 这个名字会直接显示在开机选择界面里。
⚠️ 分区操作会改动磁盘结构,执行前务必完成数据备份。具体分区结构可参考官方分区布局文档。
操作:
- 关闭 Mac,按住电源键直到出现"正在加载启动选项",进入恢复环境
- 选择"选项",输入管理员密码
- 菜单栏打开"实用工具"→"终端"
- 先执行
diskutil list确认 disk0s2 是 macOS 容器 - 依次执行下面的命令;示例容量以 500GB 机型为参考,请按自己的磁盘容量调整
# 缩容macOS容器并创建Linux分区:先缩到200GB,再建80GB的APFS分区和1GB的FAT32分区 diskutil list diskutil apfs resizeContainer disk0s2 200GB diskutil addPartition disk0s2 APFS Linux 80GB diskutil addPartition disk0s5 FAT32 LB 1GB diskutil addPartition disk0s4 FAT32 LR 0💡 执行这些命令时机器可能冻住几分钟,属于正常现象,不要断电。每条 addPartition 之前都先跑一次
diskutil list,因为分区节点编号(disk0s4/s5)在你的机器上可能与示例不同。
第2步:安装引导包装系统并降低安全级别
目标:在 "Linux" 分区里装一份精简的 macOS 作为引导包装,并把它的启动安全策略降到允许加载非 Apple 签名内核的级别。原因:Apple 芯片只认 APFS 容器里的 macOS 引导文件,m1n1 必须"伪装"成这个容器里的内核才能被 iBoot 加载。
恢复模式终端是第2步所有命令的执行位置
⚠️ 这一步会修改系统安全策略,属于高风险操作。执行前再次确认已备份数据。
操作:
- 在启动选择界面选择"重新安装 macOS Big Sur",目标磁盘选 "Linux",等待安装完成并自动重启
- 完成首次设置,创建管理员账号;确认版本不低于 11.2
- 关机后再次按住电源键进入恢复环境,打开终端
- 查找 "Linux" 分区的卷组 ID,记住这个 ID
- 执行降安全级别命令,按提示选择匹配的 OS install 并输入第 2 步创建的管理员凭据
- 关闭 SIP 完成收尾
# 在恢复模式终端中:查找Linux分区的卷组ID diskutil apfs listVolumeGroups | grep -B3 Linux | grep Group # 降低该分区的启动安全策略,选择对应OS install ID bputil -nkcas # 关闭SIP;若报Failed to create local policy,先执行 csrutil clear 再重试 csrutil disable💡 以后想把这个分区恢复为正常启动 macOS,进入恢复环境终端执行
bputil -n即可。
第3步:编译m1n1并安装引导程序
目标:在 Linux 开发机上构建 m1n1,再把产物写入 "Linux" 分区,让 Mac 重启后由 m1n1 接管引导。原因:m1n1 负责硬件初始化和加载后续系统,是双启动链条的第一环。
操作:
- 在开发机上安装 aarch64 交叉编译工具链和设备树编译器 dtc(arm64 机器可直接用本机构建)
- 克隆项目仓库并编译,产物为
build/m1n1.macho - 在开发机上起一个简易 HTTP 服务托管该文件
- 在 Mac 的恢复环境终端里拉取文件,用 kmutil 写入 Linux 分区并输入管理员凭据
# 在Linux开发机上:克隆项目并编译m1n1,产物为build/m1n1.macho git clone --recursive https://gitcode.com/gh_mirrors/docs157/docs cd docs make # 用HTTP服务把编译产物传给Mac cd build python3 -m http.server# 在Mac恢复模式终端:拉取m1n1并安装到Linux分区 curl buildmachine.lan:8000/m1n1.macho > m1n1.macho kmutil configure-boot -c m1n1.macho -C -v /Volumes/Linux🔍 效果验证:确认双启动部署成功
出现以下现象即代表部署成功:
- 重启后屏幕不再直接进入 macOS,而是显示 m1n1 的 logo 和初始化输出(m1n1 启动时会替换 Apple logo)
- 开机按住电源键调出启动选择界面,能看到名为 "Linux" 的新系统入口
启动选择界面中,"Linux"入口与macOS并列,按住电源键即可调出
再执行一条命令做最终确认:
# 在恢复模式终端确认磁盘已出现新的Linux分区与FAT32分区 diskutil list输出中应能看到新增的 "Linux" APFS 容器和两个 FAT32 分区,与第 1 步的操作结果一一对应。
🩹 常见问题速查
| 现象 | 原因 | 处理方法 |
|---|---|---|
| 分区命令执行时机器冻住几分钟 | diskutil 正在重写 APFS 容器数据 | 属正常现象,耐心等待,切勿断电 |
csrutil 报Failed to create local policy | 系统安全策略状态不干净 | 先执行csrutil clear重置,再重新降级安全策略 |
| bputil 选不到对应的 OS install | 卷组 ID 与 "Linux" 分区不匹配 | 重跑 listVolumeGroups 命令,核对并选择 "Linux" 分区的 ID |
| 分区编号和示例不一致(s4/s5 对不上) | 新分区编号取决于前一个分区的节点名 | 每条 addPartition 前执行diskutil list确认实际节点名 |
| 误操作后 Mac 无法开机 | 内部存储或 GPT 分区表被错误写入 | 用另一台 Mac 按 DFU 恢复流程修复;切勿触碰 NOR 闪存 |
📚 总结与延伸
回顾一下本文的成果:
- 你在 M1 Mac 上建好了 "Linux" stub 分区,为双启动预留了独立空间
- 该分区的安全策略已降为 Permissive,允许加载 m1n1 这类非 Apple 内核
- m1n1 已写入分区,重启后可通过启动选择界面在两个系统间切换
- 接下来可以基于 m1n1 加载 Linux 内核,逐步体验硬件驱动支持
延伸阅读:
- Asahi Linux 官方开发者快速入门
- 项目常见问题 FAQ
- NVRAM 变量参考
更多硬件细节、启动机制与社区动态,建议直接查阅 Asahi Linux 官方文档库获取最新进展。
【免费下载链接】docsAsahi Linux documentation项目地址: https://gitcode.com/gh_mirrors/docs157/docs
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考