为什么struct file_operation中没有munmap回调?

时间:2014-08-02 19:25:35

标签: c linux kernel-module mmap

我正在使用Linux内核模块,该模块通过syscall mmap与用户应用程序共享一块内存。该模块可以在struct file_operations中定义的mmap回调的帮助下正常工作,该回调在调用syscall时通知模块。

然而,当用户应用程序想要通过系统调用munmap停止共享时,问题就出现了。没有munmap回调或在struct file_operations中执行类似工作的东西。因此,我必须做另一个ioctl来通知内核模块共享已被撤销,这既不方便又不安全。

在我搜索解决方案期间,我发现曾经有一个munmap回调被定义。但是当内核版本大约是2.4或者之后的某些时候它被删除了。

有人可以告诉我为什么删除了munmap回调,或者在调用munmap系统调用时是否有任何替代方法来通知内核模块?

2 个答案:

答案 0 :(得分:4)

经过一番搜索,我终于找到了答案。

我需要的功能在于vm_operations_struct。如果munmap()系统调用成功执行,将调用close回调,我可以使用此函数指针通知我的内核模块刚刚发生的内存unmap。

默认关闭操作的覆盖,即close函数指针的赋值,在我的内核模块中的mmap处理程序中完成,其中vm_area结构作为参数提供,你可以做所有的事情你想要它。

实际上,所有细节都在Book Linux Device Drivers 3,Chapter 15中进行了描述。

感谢所有人提供真正有用的建议。

答案 1 :(得分:1)

munmap()不是文件操作,它是对映射内存本身进行操作的系统调用。

mmap()文件描述符完全有效,然后关闭文件描述符。