系列进度第一~五篇:裸机启动、UART、GPIO、多核(基础篇已完成)第六篇(本文):MMU 和页表第七篇:中断处理与异常向量表第八篇:加载下一阶段(SD 卡读取 + jump_to)第九篇:ARM Trusted Firmware(ATF)第十篇:移植 Rust OS第十一篇:Rust 嵌入式生态为什么需要 MMU?没有 MMU 的世界(我们前五篇的状态):所有代码直接访问物理地址没有内存保护,任何代码都能读写任何地址无法运行用户态程序(用户程序不能直接访问硬件)无法实现进程隔离启用 MMU 之后:每个进程看到独立的虚拟地址空间内核和用户程序地址空间隔离可以标记页面为只读、可执行、不可执行D-Cache 和 I-Cache 可以安全启用(依赖 MMU 的缓存一致性管理)一、AArch64 页表结构地址空间划分AArch64 有两个独立的地址翻译基址寄存器: