ARM中的内存检测

时间:2013-10-22 17:22:00

标签: memory assembly x86 arm

我是ARM的新手,并找到了基于ARM检测平台内存映射的方法。早期我在x86中工作很少,可以通过一些BIOS调用查找内存映射。

虽然ARM不存在BIOS,但我们可以在ARM中做同样的事情。

ARM中是否存在用于查找内存映射的指令??

3 个答案:

答案 0 :(得分:4)

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

  1. 阅读arm.com上的相应核心文档
  2. 阅读CPU文档
  3. 阅读平台的文档,了解它是否有连接到SOC(CPU)的外部存储器
  4. 或作为捷径: 如果您的平台供应商提供了一个工具链来为其编译代码,请创建一个虚拟项目并在链接器文件中查找内存布局......

    收集此信息:

    1. 相应核心的内存映射
    2. CPU的内存映射
    3. 如果它具有外部可访问内存,则必须执行一些步骤来初始化控制器。
    4. 使用收集的数据并为您的项目构建链接器文件
    5. 用它做任何你想做的事

答案 1 :(得分:0)

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

Linux引导界面是最常用的界面,请参阅内核源代码中的Documentation / arm / Booting和头文件。

答案 2 :(得分:-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而不是完全测试它。