我试图理解 Linux内核中字符设备驱动程序背后的概念。基本上,我想向用户模式程序公开IOCtl。我实现了' struct file_operations-> unlocked_ioctl '和 dummy'struct file_operations-> open,-> close'回调(我的意思是这些-> open,- > close回调总是返回true,而没有任何其他逻辑)。所以我的疑问是我是否真的需要保留这些API?我尝试在内核模式驱动程序中删除这些-> open-> close回调,但仍然可以从用户模式访问IOCtl函数。我想知道在这种情况下要公开的“ struct file_operations”所有必需的功能是什么。有人可以澄清一下吗?
答案 0 :(得分:1)
在回调函数的struct file_operations
对象中没有是强制。
当VFS(虚拟文件系统)发现某个函数为NULL时,它可能将其解释为默认实现(例如.open()
和.close()
默认情况下仅返回0)或表示为“对于给定文件,不支持”(例如,缺少.write()
以及其他一些字段表示给定文件不支持写入文件。)
仅填充实现所需功能所需的那些功能。
在struct file_operations
中唯一要填写的字段是owner
。在大多数情况下,应将其设置为THIS_MODULE
:
.owner = THIS_MODULE
通过这种方式,您可以保护其他回调函数免受模块的卸载的影响。