Linux kernel 修改Linux进程页表以实现无需系统调用的物理内存访问

Linux kernel 修改Linux进程页表以实现无需系统调用的物理内存访问,linux-kernel,linux-device-driver,Linux Kernel,Linux Device Driver,我正在为Linux3.5.7开发一个实时应用程序。应用程序需要管理PCI-E设备 为了访问PCI-E卡空间,我将mmap与/dev/mem结合使用。但是(如果我错了,请纠正我)每次我读取或写入映射内存时,都需要系统调用/dev/mem伪驱动程序来处理内存访问 为了避免这个系统调用的开销,我认为应该可以编写一个内核模块,以便在例如ioctl调用中我可以修改进程页表,以便将物理设备页映射到用户空间页并避免系统调用 你能给我介绍一下吗 谢谢和问候 但是(如果我错了,请纠正我)每次我读取或写入映射内存时

我正在为Linux3.5.7开发一个实时应用程序。应用程序需要管理PCI-E设备

为了访问PCI-E卡空间,我将mmap与/dev/mem结合使用。但是(如果我错了,请纠正我)每次我读取或写入映射内存时,都需要系统调用/dev/mem伪驱动程序来处理内存访问

为了避免这个系统调用的开销,我认为应该可以编写一个内核模块,以便在例如ioctl调用中我可以修改进程页表,以便将物理设备页映射到用户空间页并避免系统调用

你能给我介绍一下吗

谢谢和问候

但是(如果我错了,请纠正我)每次我读取或写入映射内存时,都需要系统调用

你错了

应该可以编写内核模块,以便在ioctl调用中修改进程页表


这正是mmap()所做的。

一旦访问页面所需的映射被实际编程到MMU中,我不认为仅仅访问该内存就需要进一步的内核干预(上下文切换所需的任何重新编程除外),除非物理实现需要通过某种更间接的机制捕获和代理访问。mmap()真的可以用于访问PCIe配置空间吗?@PeterL。绝对地您可以使用mmap()/dev/mem访问内存-其中包括PCIe配置空间所在的区域。