如何在ARM中尝试缓存失效和缓存清理?

如何在ARM中尝试缓存失效和缓存清理?,arm,cpu-cache,Arm,Cpu Cache,我想在Raspberry Pi中尝试缓存清理和缓存失效 有人能指导一下吗。我只是想做一些DMA传输并尝试一些东西 另外,如果有人能给我一个关于如何检查ARM中的缓存是否已被清理的代码片段,这将非常有用 例如,我想查看高速缓存的状态并给出指令 缓存失效并查看内存状态对于Raspberry Pi的ARM1176,缓存维护通过c7组系统控制协处理器(CP15)操作执行。数据缓存清除+无效是mcr p15,0,r0,c7,c14,0,可以使用mrc p15,0,c7,c10,6读取缓存脏状态寄存器(它只

我想在Raspberry Pi中尝试缓存清理和缓存失效 有人能指导一下吗。我只是想做一些DMA传输并尝试一些东西

另外,如果有人能给我一个关于如何检查ARM中的缓存是否已被清理的代码片段,这将非常有用

例如,我想查看高速缓存的状态并给出指令
缓存失效并查看内存状态对于Raspberry Pi的ARM1176,缓存维护通过c7组系统控制协处理器(CP15)操作执行。数据缓存清除+无效是mcr p15,0,r0,c7,c14,0,可以使用
mrc p15,0,c7,c10,6
读取缓存脏状态寄存器(它只是告诉您缓存是否已清除或已写入)

这里有太多的信息需要重复,因此我建议参考TRM了解详细信息-如果Raspberry Pi TRM没有涵盖它,您可以找到完整的ARM1176 TRM(其中包含一些示例代码片段)。一如既往,它还提供了一个方便的实际使用参考


至于检查实际缓存内容,如果需要的话,您需要一个JTAG硬件调试器。

对于Raspberry Pi的ARM1176,缓存维护是通过c7组系统控制协处理器(CP15)操作执行的。数据缓存清除+无效是mcr p15,0,r0,c7,c14,0,可以使用
mrc p15,0,c7,c10,6
读取缓存脏状态寄存器(它只是告诉您缓存是否已清除或已写入)

这里有太多的信息需要重复,因此我建议参考TRM了解详细信息-如果Raspberry Pi TRM没有涵盖它,您可以找到完整的ARM1176 TRM(其中包含一些示例代码片段)。一如既往,它还提供了一个方便的实际使用参考


至于检查实际的缓存内容,如果需要的话,您需要一个JTAG硬件调试器。

C15(不是CP15)通常是特定于ARM的,有时允许缓存检查。ARM1176似乎没有这个。您可以利用不一致性来检查缓存。1.关闭缓存2。补充一个记忆字/第3行。打开缓存4。阅读记忆。这将适用于缓存大小以下的区域。在此之后,您可以将内存恢复到原始状态。@artlessnoise我以前从未听说过C15-所有ARM文档都将协处理器称为CPn。我喜欢这个把戏,但是如果这个区域不在缓存中,那么你永远不会知道它是什么。而且它对I缓存没有帮助(不可否认,这并不是特别有趣)。另外,你知道,所有的不连贯都可能出错;)我的意思是
mrcp15,0,c15,cxx,n
是一个保留的cp15空间。是的,我的意思是,如果你有一个32K的d缓存,你可以检查32K的主内存,说是缓存了吗?每行回答是/否。C15(不是CP15)通常非常特定于ARM,有时允许缓存检查。ARM1176似乎没有这个。您可以利用不一致性来检查缓存。1.关闭缓存2。补充一个记忆字/第3行。打开缓存4。阅读记忆。这将适用于缓存大小以下的区域。在此之后,您可以将内存恢复到原始状态。@artlessnoise我以前从未听说过C15-所有ARM文档都将协处理器称为CPn。我喜欢这个把戏,但是如果这个区域不在缓存中,那么你永远不会知道它是什么。而且它对I缓存没有帮助(不可否认,这并不是特别有趣)。另外,你知道,所有的不连贯都可能出错;)我的意思是
mrcp15,0,c15,cxx,n
是一个保留的cp15空间。是的,我的意思是,如果你有一个32K的d缓存,你可以检查32K的主内存,说是缓存了吗?每行回答是/否。比不可能好一点。