Linux在特定的物理地址分配内存

标签 linux linux-device-driver device-driver pci

我正在测试 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/

相关文章:

c - 用户空间到内核空间和 sysfs 以及如何使用 sysfs 更改 igmpv3 pkt 中的一个保留值

C Linux 设备编程 - 直接从/Dev 读取

windows - 内核调试: Windows 7 hangs at boot time

device-driver - 删除 .inf 和 .pnf 文件

linux - 在 Linux fork 期间防止文件描述符继承

linux - 获取 Linux 内核模块中现有设备类(结构类)的指针

linux-kernel - 如何让我的设备驱动程序在系统启动时加载?

c - 在用户空间中模拟 C 中的内存映射设备

linux - 下载 bench-2.2.3 文件时出错

c - ALSA snd_pcm_drop() 没有清除完整的缓冲区