关于struct file_operations的.owner字段

时间:2018-01-27 18:15:58

标签: linux-kernel linux-device-driver

参考LDD-3 pg-50。它是写的

  struct module *owner

第一个file_operations字段根本不是操作;它是指向“拥有”结构的模块的指针。此字段用于防止模块在其操作正在使用时被卸载。几乎所有时间,它都只是初始化为THIS_MODULE。

如果我们提到LDD-2,则说明是

“此字段不是像file_operations结构中的其他所有方法。而是指向”拥有“此结构的模块的指针;内核使用它来维护模块的使用计数。”< / p>

现在我的问题是这个字段实际上是如何阻止模块被卸载的?

谢谢,

1 个答案:

答案 0 :(得分:1)

当打开使用这些操作的文件时,在调用.open()文件的操作之前,会为try_module_get()模块调用函数.owner。这会增加模块的使用计数器,因此无法使用rmmod命令卸载模块。

当删除对文件的最后一次引用并完成其.release()操作时,将为module_put模块调用函数.owner。这会减少模块的使用计数器,因此可以再次卸载模块(除非其参考计数器因其他原因而增加)。