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

lia*_*ig1 5 c linux mmap kernel-module

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

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

在寻找解决方案的过程中,我发现曾经有一个munmap回调定义。但是,当内核版本大约为2.4或之后的某个时候,它已被删除。

有人可以告诉我为什么取消了munmap回调,还是有其他方法可以在调用munmap syscall时通知内核模块?

lia*_*ig1 6

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

我需要的功能在vm_operations_struct中。如果munmap()syscall成功执行,将调用close回调,并且我可以使用此函数指针通知我的内核模块刚刚发生了内存取消映射。

默认关闭操作的覆盖(即关闭函数指针的分配)是在内核模块的mmap处理程序中完成的,其中提供了vm_area结构作为参数,您可以执行所需的所有操作。

实际上,所有详细信息都在《 Linux设备驱动程序》第3章第15章中进行了描述。

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