1

我是 ARM 新手,正在寻找基于 ARM 检测平台内存映射的方法。之前我在 x86 中工作很少,可以使用一些 BIOS 调用找出内存映射。

尽管 ARM 中没有 BIOS,但我们可以在 ARM 中执行相同的操作。

ARM中是否存在任何指令来查找内存映射?

4

3 回答 3

4

如何找到 ARM CPU 指南的内存映射:

  1. 阅读 arm.com 的文档以了解您的对应核心
  2. 阅读 CPU 的文档
  3. 阅读您平台的文档,看看它是否有外部存储器连接到 SOC(CPU)

或者作为一种快捷方式:如果您的平台供应商提供了一个工具链来为其编译代码,请创建一个虚拟项目并在链接器文件中查找内存布局......

收集这些信息:

  1. 对应内核的内存映射
  2. CPU 的内存映射
  3. 如果它具有外部可访问内存,则必须执行一些步骤来初始化控制器。
  4. 使用收集的数据并为您的项目构建链接器文件
  5. 随心所欲
于 2013-10-22T18:21:01.530 回答
0

尽管 Microsoft 确实为运行 Windows 的系统指定了 UEFI,但没有像 BIOS 或 EFI 这样普遍存在于 ARM 系统的接口。

Linux 启动界面是最常用的界面,参见内核源码和头文件中的 Documentation/arm/Booting。

于 2013-10-26T22:33:53.350 回答
-1

如果你想编写一个可以跨不同 Arm 设备移植的程序,你必须自己检测内存。我不是很好,尤其是在 ARM 中,但有一些共同的原则——你可以简单地扫描整个地址空间并通过写入一个数字然后读回它来探测内存。通常,两个这样的操作提供了不同的数字,以排除偶尔的错误:

1. write 0aah
2. read and check for 0aah
3. write 055h
4. read and check for 055h

注意 1:为了更快的速度,不必检查每个字节 - 必须使用一些自然粒度并且仅在页面开始时检查(无论此平台上的大小如何)。

最后,您将获得 RAM 内存的映射。ROM内存不是那么容易被检测到的,但也没有通用的解决方案。

注意2:根据架构(好吧,我说我不是ARM专家),您的程序必须根据CPU的内存保护机制(如果有的话)访问整个内存。

注意 3:这种方法唯一可能出现的问题是内存映射 IO。触摸它会以不可预知的方式影响 IO 设备。这就是为什么,您必须知道寻址空间的哪个区域用于内存映射 IO,而根本不对其进行测试。

于 2013-10-22T18:31:47.310 回答