“ struct file_operations”的强制功能

时间:2019-01-18 08:39:46

标签: c linux linux-kernel linux-device-driver

我试图理解 Linux内核字符设备驱动程序背后的概念。基本上,我想向用户模式程序公开IOCtl。我实现了' struct file_operations-> unlocked_ioctl '和 dummy'struct file_operations-> open,-> close'回调我的意思是这些-> open,- > close回调总是返回true,而没有任何其他逻辑)。所以我的疑问是我是否真的需要保留这些API?我尝试在内核模式驱动程序中删除这些-> open-> close回调,但仍然可以从用户模式访问IOCtl函数。我想知道在这种情况下要公开的“ struct file_operations”所有必需的功能是什么。有人可以澄清一下吗?

1 个答案:

答案 0 :(得分:1)

在回调函数的struct file_operations对象中没有强制

当VFS(虚拟文件系统)发现某个函数为NULL时,它可能将其解释为默认实现(例如.open().close()默认情况下仅返回0)或表示为“对于给定文件,不支持”(例如,缺少.write()以及其他一些字段表示给定文件不支持写入文件。)

仅填充实现所需功能所需的那些功能。


struct file_operations中唯一要填写的字段是owner。在大多数情况下,应将其设置为THIS_MODULE

.owner = THIS_MODULE

通过这种方式,您可以保护其他回调函数免受模块的卸载的影响。