为什么 ARMv7-A 在从缓存中刷新堆栈指针时会崩溃

Why ARMv7-A crashes when flushing the stack pointer from the cache

我正在尝试逐出 ARM Cortex-A8 处理器中堆栈指针指向它的内存地址。我正在尝试使用以下代码来做到这一点:

cpy r3, sp
mcr p15, 0x0, r3, cr7, cr6, 0x1

我在可加载内核模块中有 运行 上述代码。 运行在内核中执行上述代码后,OS 崩溃并需要重新启动。但是上面的指令可以很好地从缓存中刷新变量。

谁能给我一些解决问题的建议?

感谢天马行空,实际上ARM cortex-a8有3种基于修改后的虚拟地址的缓存操作命令:

Invalidate (C6, 1) (just invalidate the cache line)
Clean (C10, 1) (Update memory if the cache line is dirty)
Clean & Invalidate (C14, 1) (Update memory then invalidate cache line)

正如您在问题中看到的那样,我使用了无效指令,它导致内存中的堆栈数据无效。但在使用 Clean&Invalidate 指令后问题就解决了。所以最终代码如下:

cpy r3, sp
mcr p15, 0x0, r3, cr7, cr14, 0x1
DSB SY