ARM Linux:有效虚拟内存的某个特定页面上的总线错误

时间:2012-04-19 13:54:24

标签: linux embedded arm sigbus

我正在使用嵌入式ARM Linux系统,偶尔(但并非总是),当访问虚拟地址0x2b200000的页面时,我的应用程序中出现了总线错误。根据编译器/链接器是将代码还是数据放在该地址,我在读取变量时或者从该页面获取指令时会遇到总线错误。在总线错误之后我cat / proc / self / maps并确认页面确实已映射为我的进程中有效的内容。

它似乎只是一页。页面0x2b201000和0x2b1ff000总是可以的(显然可能有另一个不同的地址在某处完全不同,我只是碰巧没有访问它)。

我意识到这里有一百万个未知数,但是想知道是否有人能指出我在调查的某个方向。系统具有自定义驱动程序.kos,它使用内核其余部分保留或隐藏的物理内存,但我不知道这会如何影响虚拟地址。

任何洞察力都非常感激。

2 个答案:

答案 0 :(得分:2)

感谢大家的帮助。我发现了问题 - 行为不端的驱动程序期望某些用户地址与2MB对齐。因此,例如,如果有效的映射地址实际上是0x2b3cc000,它将错误地与0x2b200000对齐,并践踏我的应用程序!

答案 1 :(得分:0)

根据您的系统,您可能拥有相同的虚拟>物理映射。如果你有另一个工作设备,我会尝试运行它。这样您就可以立即确定它是软件还是硬件问题。

运行用户代码或驱动程序代码时是否发生总线错误?

您说错误并不总是发生。当它与特定构建一起发生时,它是否总是在该构建中发生,还是仍然是零星的?