ARMv7-A小系统实践(十):L1、L2、屏障与Cache一致性
本章记录什么
这一章解释 L1 I/D Cache、分支预测、SCU 和 L2C-310 的启用与维护。核心问题不是“把 SCTLR 的某一位置 1”,而是旧缓存状态何时失效、页表何时需要 clean、跨核共享何时依赖 SCU,以及 DMA 或自修改代码出现后软件应怎样维护一致性。
在这一章之前做了什么
上一章已经为普通内存和 MMIO 建立了不同的页表属性。只有在属性正确后,Cache 的行为才有可推导基础。启动阶段还要先无效化旧状态,再按顺序启用 SCU、ACTLR.SMP、L1 和 L2;运行阶段则要区分 clean、invalidate 和 clean+invalidate。
本章从概念、顺序和屏障开始,随后给出完整的 Cache 实现代码。最后会明确当前小系统证明了哪些 CPU 一致性能力,以及尚未通过 DMA 场景证明什么。