ROM 的地址空间和找出某些文件的虚拟地址

Address spaces for ROM's and finding out the virtual address of certain files

感谢阅读这个问题。

总的来说,我对 arm 和计算机体系结构还很陌生,如果这是一个基本问题,我很抱歉。

我花了很多时间阅读和学习 MMU 以及虚拟地址到物理地址的转换。我也不知道地址 spaces。只是为了确保所有 io 外围设备(如以太网和 USB)以及外部 RAM 和 ROM 都有自己的地址,对吗?所以我想具体了解地址值,所以我在此处阅读了此 PDF 文档:http://infocenter.arm.com/help/topic/com.arm.doc.den0001c/DEN0001C_principles_of_arm_memory_maps.pdf,但它非常混乱。我无法清楚地看到它在哪里说了 ROM 的确切地址 space 并且我发现地址 space 在某些手臂电话上加起来不​​超过 128GB。

你能帮我理解这一切吗?我弄错了吗?我如何找到所有外围设备、RAM 和 ROM 的确切地址,以便我可以在我的代码中为这些地址执行一些加载和存储功能。另外,如果我要对我的一部旧手机进行编码,你如何找到某些文件和文档的虚拟地址。因此,例如地址 0x00BA FFFF 到 0x0AFF FFFF 是针对某个音频文件的。通过这种探索,我学到了很多。

再次感谢,

威尔史密斯

ARM 制造处理器内核,但不制造芯片。他们拥有或曾经拥有一些您可以使用的外围设备,但芯片供应商通常拥有自己的外围设备。重点是,即使它们具有相同的核心,来自不同芯片供应商的芯片也没有相同的内存映射,更不用说外围设备等。我没有读过你的link(把links放在一起是个坏主意就像在问题或答案中一样,因为 link 内容不受 Whosebug 控制,并且可能会消失,从而完全破坏问题或答案),但最后的示例内存映射只是一个示例。需要芯片,有时还需要系统供应商文档,才能获得该芯片或系统的完整物理地址映射。不要尝试在其他任何地方重复使用该地图。这些信息仅需询问或挖掘即可获得,有时受 NDA 保护,您可能会或可能无法获得。另请注意,内核上可能有不止一根总线,系统中内核外肯定有不止一根总线,因此有多个物理地址space。然后你有 mmu,从地址 space 的角度来看,它只是将物理地址的一些到许多高位转换为虚拟地址,并且在该模式下 processor/code 对虚拟地址进行操作。 (例如,在 linux 等操作系统上 运行 的所有应用程序都可以在地址 0x8000 处编译为 运行,mmu 允许这种情况发生,以便所有应用程序认为它们具有相同的 space 但 none 他们的物理地址冲突)