我工作的ARM嵌入式Linux系统上,偶尔的一个特定页面上总线错误(但不总是)我得到了我的应用程序总线错误时,在虚拟地址0x2b200000的页面访问。根据编译器/链接器是将代码还是数据放在该地址,我在读取变量时或在从该页面获取指令时遇到总线错误。公交车出错后,我/ cat/proc/self/maps并确认该页面确实已映射为我的进程中有效的内容。ARM Linux系统:有效的虚拟内存
它只是似乎是一个页面。页面0x2b201000和0x2b1ff000总是可以的(很明显,可能会有另一个地址完全不同的错误地址,我只是没有碰到任何东西)。
我知道这里有一百万个未知数,但不知道是否任何人都可以在调查的一些方向指向我。该系统具有自定义驱动程序.kos,它使用从内核其余部分保留或隐藏的物理内存,但我不明白这是如何影响虚拟地址的。
任何有识之士非常感谢。
你是否认为这是一个硬件错误,这是你看到的数据中止错误?如果在加载linux之前,如果你有一个引导加载程序,或者创建一个引导加载程序,你可以在那里读取该地址并查看是否存在总线故障。基本上把问题分成一半,是硬件还是软件(例如,因为该地址范围不在mmu表中,它是mmu故障)。 – 2012-04-19 14:19:16
我假设一旦启动Linux并加载驱动程序,就会发生故障。由于它始终是相同的虚拟地址(并且可能不总是相同的底层物理页框)。你知道我可以在哪里为MMU添加调试吗? – gimmeamilk 2012-04-19 14:31:59