【问题标题】:ARM memory mapping: INT15 equivalent? Standard way to query memory map?ARM内存映射:INT15等效?查询内存映射的标准方法?
【发布时间】:2013-11-01 14:46:19
【问题描述】:

PC 架构(BIOS 的存在及其使用非常标准化),您可以发现 RAM 内存的大小,以及它的 保留/free for use 区域通过使用 INT15 BIOS 中断函数 0xE820

由于我对低级编程充满热情,并且在对英特尔架构进行了大约 6 个月的编程后,我决定尝试了解其他架构的工作原理。所以我开始深入研究 ARM 开发。我目前正在开发 2 块电路板:Olimex A20 OlinuXino-MICROSamsung 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 的内存寻址空间 已保留对于Memory-Mapped I/O devices,而在此链接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 内存

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

【问题讨论】:

    标签: memory arm bios osdev memory-mapping


    【解决方案1】:

    ARM 芯片上的内存映射高度特定于芯片。通常也没有 BIOS 之类的东西,因此您的引导加载程序或虚拟机管理程序必须自行确定内存布局。

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

    但是,在许多情况下,内存“映射”(RAM 的开头及其大小)只是针对引导加载程序移植到的每个板进行硬编码,因为它不太可能在每次引导时都发生变化。

    【讨论】:

    • 这听起来很令人沮丧..至少没有一种标准的方式来以编程方式发现板类型吗?
    • 是和不是。有一个标准,引导加载程序将 machine number 传递到特定寄存器中的内核中,在 Linux 上用于构建一些通用的内核;内核仍然需要有一个支持的板类型及其特性的列表。
    • 因此,我将不得不依靠软件来实现标准化,而不是依靠硬件。问题:当提到由一组通常是广泛目标实现的接口时,有人谈到“标准”。是否有由一组可接受的广泛 ARM 设备/板实现并满足我的需求的软件标准?我现在在两个板上都使用 U-Boot。如果我想实现一个可以轻松移植到各种 ARM 板上的管理程序,这个引导加载程序是否值得使用?我需要一个接口来检测内存映射硬件配置的细节
    • 恐怕没有类似的东西,除了 UEFI/ACPI(很重)。我会说现在不要担心。首先让它在你的硬件上运行,然后考虑移植。
    • 你说得对,现在考虑还为时过早。我希望在我真正开始编写代码之前找到一个令人满意的答案,因为它会使开发变得更加容易。谢谢你们的帮助!
    【解决方案2】:

    过去,ARM 引导加载程序使用 Booting ARM Linux 中描述的 ATAG 结构将信息传递给 Linux 内核。引导加载程序至少需要初始化系统中的 RAM 并传递 ATAG_MEM 结构来描述 RAM 在地址空间中的位置。解释这些结构会给你一些你需要的信息,但它不会告诉你任何关于任何外围设备的信息。在这种引导方法中,机器类型用于触发特定于平台的代码来初始化其余硬件。

    执行此操作的新方法是通过Flattened Device Tree。设备树起源于 OpenFirmware,除了描述 RAM 映射外,还可以描述其余的硬件和外围设备。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-11
      • 2015-08-09
      • 1970-01-01
      • 2013-09-02
      • 2014-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多