根据ARM Cortex-A编程指南:
因此,设备探测需要在外部进行特殊处理 报告对不存在区域的读取中止将产生 即使这样的内存被标记为,也不精确,异步中止 强烈订购,或设备。
我无法理解标记为SO或设备的内存如何与不精确的中止有关。如果内存正常,它们也会发生。
右?
答案 0 :(得分:2)
这里的要点是设备探测。有人可能会认为,由于设备内存是强有序的,所以可以映射一个区域,然后依次读取一堆地址,看看它们背后是否有任何东西(因为你知道CPU不会通过推测,缓存来混淆问题) ,重新排序等)你将获得数据或每个地址的中止。但是,外部中止超出了MMU的控制范围,因此无论内存属性如何,设备不存在都会导致不精确中止 - 没有办法知道哪个访问导致它,因此您不知道哪个设备不存在。
换句话说,“即使你对所有内存访问都施加了强烈的排序,它也不一定适用于外部中止,所以如果你正在做一些可能导致内部中断的事情,请小心。”
如段落的其余部分所述,原始引用来自,通常处理不精确中止的唯一合理方法是杀死生成它们的任何内容 - 如果你不知道是什么出错了,你无法从中恢复 - 很明显,如果中止来自你的内核探测设备并且它会自行杀死,那就不好了。因此,在这种情况下需要“特殊”处理。