0

感谢您阅读这个问题。

一般来说,我对手臂和计算机架构非常陌生,如果这是一个基本问题,我很抱歉。

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

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

再次感谢,

威尔史密斯

4

1 回答 1

1

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

于 2016-02-05T16:03:34.520 回答