Memory ARM中的内存检测

Memory ARM中的内存检测,memory,assembly,x86,arm,Memory,Assembly,X86,Arm,我是ARM新手,正在寻找基于ARM的平台内存映射的检测方法。之前我在x86中很少工作,可以通过一些BIOS调用找到内存映射 我们在ARM中也可以这样做,尽管ARM中没有BIOS ARM中是否存在查找内存映射的指令???如何查找ARM CPU指南的内存映射: 请阅读arm.com上有关您的core响应的文档 阅读CPU的文档 阅读平台的文档,查看是否有连接到SOC(CPU)的外部内存 或者作为快捷方式: 如果您的平台供应商提供了一个工具链来为其编译代码,请创建一个虚拟项目,并在链接器文件中查找内存

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

我们在ARM中也可以这样做,尽管ARM中没有BIOS


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

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

  • 请阅读arm.com上有关您的core响应的文档
  • 阅读CPU的文档
  • 阅读平台的文档,查看是否有连接到SOC(CPU)的外部内存
  • 或者作为快捷方式: 如果您的平台供应商提供了一个工具链来为其编译代码,请创建一个虚拟项目,并在链接器文件中查找内存布局

    收集以下信息:

  • 对应核心的内存映射
  • CPU的内存映射
  • 如果它有外部可访问内存,则必须执行一些步骤来初始化控制器
  • 使用收集的数据并为项目生成链接器文件
  • 你想用它做什么都行

  • 如果你想写一个可以在不同的Arm设备上移植的程序,你必须自己检测内存。我不是很擅长ARM,尤其是在ARM方面,但是有一些共同的原则——你可以简单地扫描整个地址空间,通过写一个数字然后读回来探测内存。通常,这两种操作的编号不同,以排除偶尔出现的错误:

    1. write 0aah
    2. read and check for 0aah
    3. write 055h
    4. read and check for 055h
    
    注1:为了提高速度,不必检查每个字节-必须使用一些自然粒度,并且只在页面开始时检查(无论此平台上的大小)

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

    注2:根据CPU的内存保护机制(如果有的话),根据体系结构(我说过我不是ARM专家),您的程序必须能够访问整个内存


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

    对于ARM系统,并没有比BIOS或EFI更普遍的接口,尽管Microsoft确实为运行Windows的系统指定了UEFI


    Linux引导接口是最常见的接口,请参阅内核源代码和头文件中的文档/arm/Booting。

    “尽管arm中没有BIOS”。一些基于ARM的设备具有生物传感器。它实际上并不取决于您使用的CPU体系结构。您可以开始在CPU数据表(技术参考手册)中查找它。什么操作系统?还是你自己写的?只是为了学习,我在基于ARM的平台上启动Linux内核。这个解决方案会导致挂起,不是很可靠。这个解决方案不会导致挂起。它不是我发明的。它被广泛使用。您也可能会意外地将无效值写入地址空间中内存映射的I/O端口。除非你确切知道自己在做什么,否则我不会推荐这种方法。如果你触摸到一个芯片供应商没有使用的地址空间,那么所有的赌注都是不可能的,而且会在arm和许多其他平台上经常发生。如果你已经知道内存在哪里,因为你查了它,那么为什么你要检测,你已经知道答案了?我同意内存映射IO,并在答案中添加了关于它的注释。但是我不同意空的地址空间。尝试读取/写入丢失的内存不会损害CPU。至少我看不出这样的操作会损害CPU的任何机制。+1在包括x86在内的任何其他平台上都是如此。