ARM锁定寄存器写操作会使器件崩溃

我正在使用运行Linux内核的ARM Cortex A-8设备进行一些实验。 我可以毫无问题地访问和读取L2缓存锁定寄存器的值: asm volatile(“mrc p15,1,%0,c9,c0,0”:“= r”(i)); 当我尝试将值写回时,设备立即崩溃: asm volatile(“mcr p15,1,%0,c9,c0,0”:::“r”(i)); 代码作为内核模块运行,因此没有权限问题。 我想知道在写入寄存器值之前我是否遗漏了什么特别的东西?     
已邀请:
如果你打算使用缓存锁定,你需要注意一个很长的清单。 ARM的信息中心有一些提示:http://infocenter.arm.com/help/index.jsp?topic = / com.arm.doc.ddi0344i / Chdeghcb.html 特别是,确保禁用中断,并使适当的指令/数据无效。还要检查是否已启用读/写访问 - 即使您处于内核模式,它也可能不是。您需要确保代码不会在关键点交叉页面或缓存行。做对,真的很棘手。你不能只设置一个缓存方式锁定并期望一切都能正常工作,你不能只用C中的内联ASM来实现它。 最糟糕的情况是,你最终会干扰L2缓存控制器的内部状态机,锁定错误的数据,防止数据完全缓存并导致所有内容中止,或者使代码不同步。这将解释崩溃。 此外,这只是实验还是你试图提高性能?它有助于避免触及DRAM /总线以获得精心设计的代码序列,例如,如果你想关闭它(深度睡眠),但通常不会取得性能。     

要回复问题请先登录注册