ARM内存映射:INT15等价?查询内存映射的标准方法?

时间:2013-10-23 10:56:06

标签: memory arm bios osdev memory-mapping

PC架构(其中BIOS的存在及其使用几乎标准化)中,您可以发现RAM内存的大小,以及保留/ strong>使用区域使用 INT15 BIOS中断功能0xE820

由于我对低级编程充满热情,在对英特尔架构进行大约6个月的编程后,我决定尝试学习其他架构如何工作。所以我开始深入研究ARM开发。我有2个我正在研究的电路板: Olimex A20 OlinuXino-MICRO 三星Arndale的Exynos 5250 。我要做的是将我为英特尔架构开发的虚拟机管理程序移植到这两个板上。我现在正处于尝试以编程方式检测可靠可接受标准化系统的内存映射的阶段>方式(我不希望为不同的ARM板编写完全不同的代码)。但到目前为止,我发现相关文档有点令人困惑。

在Olimex A20上我有一个Cortex-A7 ARM CPU 。 这里的PDF:http://infocenter.arm.com/help/topic/com.arm.doc.den0001c/DEN0001C_principles_of_arm_memory_maps.pdf,适用于Cortex-A7和其他CPU,在第14页指出内存寻址空间从1GB到2GB 保留用于内存映射的I / O设备,而此链接https://github.com/OLIMEX/OLINUXINO/blob/master/HARDWARE/A20-PDFs/A20%20User%20Manual%202013-03-22.pdf?raw=true上的Olimex-A20文档在第21页指出内存寻址空间来自1GB到3GB是 DDR-II / DDR-III内存

我只是感到困惑,或者这两个文件之间是否存在不一致?

2 个答案:

答案 0 :(得分:1)

ARM芯片上的存储器映射是高度芯片特定的。通常也没有像BIOS那样,所以你的引导加载程序或管理程序必须自己弄清楚内存布局。

通常,您需要使用SDRAM控制器来查询和初始化已安装的SDRAM芯片。这是一个非常重要的,也是非常特定于芯片的过程。您应该检查可用于芯片的引导加载程序代码(例如U-Boot)并查找内存初始化代码。

然而,在许多情况下,内存“map”(RAM的开始及其大小)只是为引导加载程序移植到的每个板硬编码,因为它不太可能在每次启动时都改变。

答案 1 :(得分:0)

历史上,ARM引导加载程序使用Booting ARM Linux中描述的ATAG结构将信息传递给Linux内核。预期引导加载程序至少初始化系统中的RAM并传递ATAG_MEM结构以描述RAM在地址空间中的位置。解释这些结构可以为您提供所需的一些信息,但它并没有告诉您任何外围设备的信息。在此引导方法中,机器类型用于触发特定于平台的代码以初始化其余硬件。

这样做的新方法是Flattened Device Tree。设备树源自OpenFirmware,除了描述RAM映射外,还可以描述其余的硬件和外设。