linux - 应用处理器内存映射

标签 linux memory linux-kernel embedded-linux memory-mapping

应用处理器的内存映射包含哪些信息?它是告诉哪个子系统可以访问 RAM 的哪个区域,还是意味着如果 CPU 尝试访问基于内存映射的地址,它可以是 RAM 地址或设备地址?我指的是这份文件
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0515b/CIHIJJJA.html .

这里 0x00_0000_0000 到 0x00_0800_0000 映射到引导区,这意味着什么?

最佳答案

您链接到的内存映射图的样式显示了处理器和外围设备将如何解码物理内存地址。这是任何片上系统设备的正常图表,但精确布局会有所不同。链接页面实际上列出了 SoC 的哪些单元使用此内存映射进行地址解码,其中包括 ARM 和 Mali 图形处理器。在 Linux 系统中,大部分信息将在设备树中传递给内核。重要的是要记住,这并没有告诉我们操作系统如何选择组织虚拟内存地址。

其中有趣的区域是:

DRAM - 这些地址将传递给 DRAM Controller 。无法保证所使用的特定板在所有该地址空间中都有 DRAM。引导固件将设置 DRAM Controller 并将这些详细信息传递给操作系统。

PCIe - 这些地址将映射到 PCIe Controller ,并最终在 PCIe 链路上传输。

该芯片上的引导区域默认包含片上引导 ROM 和工作空间。在这个特定的芯片上,ARM 增加了复杂性 TrustZone安全架构,这意味着启动后加载的应用程序代码可能无法访问该区域。在开发板上,应该可以覆盖此映射并从外部设备启动。

关于linux - 应用处理器内存映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37349191/

相关文章:

c - 如何编写Linux内核模块用于与arduino的串行通信?

linux - amba-pl011 Linux 内核模块中 pl011_tx_chars() 背后的逻辑不清楚

c - 如何在 C 中获取与寄存器宽度无关的无符号整数变量?

php - 防止应用程序在服务器端引入有害更改

linux - 在 Linux 中查找进程的内存使用情况

memory - 字节、字、长字和长字之间的区别?

c - Linux 用户空间程序的正确构建环境

java - SQLClientInfoException/Linux

调用 free() 后内存未释放

c - #include 会增加 RAM 使用吗?