我正在测试 PCI 端点驱动程序,我想从 PCI RootPort 端到 PCI 端点端做简单的复制。在 PCI Endpoint 端,我们有从 PCI 地址到 CPU 物理地址的地址转换。我们可以在翻译中配置 CPU 物理地址,使其映射到特定的 DRAM 区域。问题是我们如何在特定的 CPU 物理地址分配内存缓冲区以确保从 RootPort 端写入真的有效?
如有任何建议,我们将不胜感激。非常感谢!
最佳答案
需要先预留物理内存区域。最简单但丑陋的方法是将“mem=”参数传递给内核命令行,将您感兴趣的物理内存范围排除在内核内存管理之外,然后使用ioremap。 () 以获得它的虚拟映射。
例如,如果您的机器有 256 Mb 的 RAM,则使用 mem=255M 保留最后 Mb 供您使用,然后通过 ioermap() 映射它
注意:根据@Adrian Cox 的反馈修复了原始答案。
关于Linux在特定的物理地址分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14136135/