我有一个自定义设备驱动程序,它实现了
mmap
将共享RAM缓冲区(操作系统外部)映射到用户空间的操作缓冲区是通过传递
mem=32M
作为操作系统的引导参数,剩下的512MB作为缓冲区我想从映射内存执行零拷贝操作,如果
vm_flags
包括
VM_PFNMAP
和
VM_IO
.
我的驱动程序当前通过调用
vm_iomap_memory(vma, start, size)
,依次调用
io_remap_pfn_range
和
remap_pfn_range
,它用
虚拟机
和
虚拟机
准备好了这可以将内存映射到用户空间,但是在
get_user_pages
由于
虚拟机
正在设置标志或缺少结构页的评论
重新映射范围
显示这是预期行为,因为pfn映射的内存不应被视为“正常”然而,对于我的情况,它只是一个保留的RAM块,所以我不明白为什么不应该将它视为正常的我已经设置了缓存失效/刷新来手动管理内存。
我试过让
虚拟机
和
虚拟机
上的旗帜
vm_area_struct
在映射期间和映射之后,但是
获取用户页面
仍然失败我也看过dma库,但看起来它们依赖于
重新映射范围
在幕后。
我的问题是如何将物理内存映射为普通的、非pfn的、结构页支持的用户空间地址或者有其他的方法我应该看它吗谢谢!