我是ARM的新手,并找到了基于ARM检测平台内存映射的方法。早期我在x86中工作很少,可以通过一些BIOS调用查找内存映射。
虽然ARM不存在BIOS,但我们可以在ARM中做同样的事情。
ARM中是否存在用于查找内存映射的指令??
答案 0 :(得分:4)
如何查找ARM CPU指南的内存映射:
或作为捷径: 如果您的平台供应商提供了一个工具链来为其编译代码,请创建一个虚拟项目并在链接器文件中查找内存布局......
收集此信息:
答案 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而不是完全测试它。