在 M4 Mac 上跑 Linux 的艰难历程

The Forgetful CPU (Linux on M4)

在 M4 Mac 上跑 Linux 的艰难历程

2024 年 11 月,我入手了 M4 Mac mini,赌它能像 M1-M3 一样快速支持 Asahi Linux。然而,M4 引入了强制的 SPTM 安全机制,让原本依赖 MMIO 追踪的 Linux 启动方案失效。面对被锁死的寄存器、缺失的 device tree 配置以及违背 ARM64 规范的 WFI 指令行为,我经历了无数次崩溃与调试。通过暴力插入 debug_putc 进行二分查找,最终定位到 MMU 初始化与虚拟化寄存器的冲突。为了解决 WFI 指令导致寄存器清零的硬件缺陷,我被迫将所有 WFI 替换为 NOP 指令,并推动相关修复合并进 mainline Linux 和 m1n1。如今,Linux 已能在全核 M4 上正常启动,但这只是逆向工程外设的开端。

在 M1-M3 芯片上,m1n1 会禁用这种行为,让 CPU 表现得像其他 arm64 处理器一样,而 Asahi Linux 内核随后会特意重新启用它,以便让 CPU 核心进入更深的睡眠状态来节省电力。

同日更多故事

2026-10-02