健忘的 CPU:在 M4 Mac mini 上点亮 Linux
来源: yuka.dev — 2026-10-02
概述
作者详细记录自己首次在 M4 Mac mini 上启动 Linux 的曲折过程。M4 是第一代强制 SPTM(安全页表监视器)的 Apple Silicon,使过去基于 MMIO 跟踪的 bringup 方法失效;作者从 GXF 被锁、RVBAR 写入崩溃一路排到 MMU 映射缺失,最终又撞上 M4 上 WFI 指令会清零寄存器的新问题。
核心要点
- M4 是首代强制 SPTM(安全页表监视器)的 Apple Silicon,让 m1n1 需要大改才能在 macOS 下做 hypervisor 跟踪。
- raw boot 模式下 GXF 功能被锁定,初始化它会立刻崩溃;对 RVBAR 的写入同样崩溃,因为该寄存器已含正确值。
- 作者把 m1n1 的 debug_putc 改成只打印一个字符插进内核,靠二分定位到 MMU 初始化——Linux 未对 MMIO 建 1:1 映射,开启 MMU 后 UART 就访问不到了。
- 设备树缺少 stdout-path = serial0,补上之后才拿到完整的寄存器转储与栈回溯;另需补 smp_start_offset 才能启动次级核心。
- M4 上 WFI 的鸡位要么被锁要么被移除,默认行为会把 x0-x31 清零;作者先把所有 WFI/WFIT 换成 NOP 才成功启起全部核心。
金句
如果系统被配置为 WFI 指令可以完成,那么 WFI 就不得导致架构状态丢失——M4 的默认行为不满足这条 ARM64 规范。
👍 0
👎 0
← 返回 Lobsters 首页