我正在尝试编写一个内核驱动程序来管理一些物理上连续和可 DMA 内存的内存块(我正在使用这些内存块,kmalloc()
因为这些只是 DMA 流)。要将某些功能拉入用户空间,该内存将mmap()
使用其自己的mmap()
. 我一直在使用Linux 设备驱动程序和 Google 中出现的不良示例作为我的主要信息来源。
我的mmap()
(现在叫它my_mmap()
)需要在内核中注册。使用 似乎是唯一有效的方法struct file_operations
,但这需要为它创建一个字符设备和一个物理位置。我不想那样做。我只想为用户空间应用程序创建一个虚拟地址来访问内存缓冲区,而不是创建任何文件来映射内存缓冲区。这可能吗?
我确实发现帧缓冲区也有一个等效的结构和一个mmap()
实现,但这太过分了。这增加了更多的未知数。
据我了解,只要我对失去的灵活性感到满意,my_mmap()
就可以进行繁重的工作和使用。remap_pfn_range()
否则我将不得不实现一个本地nopages()
并使用struct vm_operations_struct
. 这个对吗?