Lobsters | 原文链接 | 2026-08-24 收录

我的两个 Cortex-A9 核心为何无法缓存一致:一段裸机 Rust 排障

来源: thejpster.org.uk — 2026-08-22

概述

作者在 Terasic DE0-Nano-SOC 开发板上用纯 Rust 写裸机程序,成功让 MMU 与两级缓存跑起来,并尝试通过 SCU(Snoop Control Unit)与中断把第二个 Cortex-A9 核心拉进 SMP。一切都很顺利,直到核心 1 设置了共享原子标志后核心 0 却始终观察不到——两个核心对同一内存地址看到完全不同的值。他贴出代码,邀请读者帮忙定位自己配置 SCU 时做错的地方。

核心要点

金句

两个处理器虽然各有独立的 L1 缓存,却共享一个所谓的 Snoop Control Unit,让它们对世界保持一致的视图。
返回 Lobsters 首页