Jos*_*hua 4 buffer mmap driver linux-kernel dma
我正在尝试编写一个内核驱动程序来管理物理上连续和可DMA的内存的一些内存块(我正在使用,kmalloc()因为这些只是DMA流).要将某些功能提取到用户空间,这个内存将mmap()使用自己的实现来编辑mmap().我一直在使用Linux设备驱动程序以及在Google中显示的不良示例作为我的主要信息来源.
我mmap()(my_mmap()现在称之为)需要在内核中注册.它似乎是使用a执行此操作的唯一有效方法struct file_operations,但这需要为其创建字符设备和物理位置.我不想那样做.我只想为用户空间应用程序创建一个虚拟地址来访问内存缓冲区,而不是创建任何文件来映射内存缓冲区.这可能吗?
我确实发现帧缓冲区也有一个与mmap()实现相同的结构,但这太过分了.这和它增加了更多的未知数.
据我所知,只要我对失去的灵活性感到满意,my_mmap()就可以完成繁重的工作remap_pfn_range().否则我将不得不实现一个本地nopages()并使用a注册它struct vm_operations_struct.它是否正确?
该mmap()操作是来自用户空间的请求,以将一些源映射到其虚拟地址空间.该用户空间程序识别的方式这是感兴趣的来源是通过提供文件描述符(这是真的只是已知的内核资源的手柄).
这意味着您必须使您的设备可以表示为文件描述符,以便用户空间程序可以告诉内核它对它感兴趣(并且内核知道调用您的mmap()实现) - 注册字符设备是执行此操作的典型方法.请注意,帧缓冲设备也可以通过字符设备访问.
您不必实施其他字符设备操作read(),write()如果它对您的设备没有意义.字符设备只是用户空间程序打开设备的内核管理句柄的一种方式.