我正在使用嵌入式 ARM Linux 系统,偶尔(但并非总是)在访问虚拟地址 0x2b200000 的页面时,我的应用程序中会出现总线错误。根据编译器/链接器是否将代码或数据放在该地址,我要么在读取变量时遇到总线错误,要么在从该页面获取指令时得到总线错误。在总线错误之后,我 cat /proc/self/maps 并确认该页面确实被映射为在我的进程中有效的东西。
它似乎只是那一页。页面 0x2b201000 和 0x2b1ff000 总是可以的(显然,在完全不同的地方可能有另一个坏地址,我只是碰巧没有访问它)。
我意识到这里有一百万个未知数,但想知道是否有人能指出我的调查方向。系统有自定义驱动程序 .kos 使用保留或隐藏在内核其余部分的物理内存,但我不明白这如何影响虚拟地址。
任何有见地的掘金都非常感谢。