参考LDD-3 pg-50。它是写的
struct module *owner
第一个file_operations字段根本不是操作;它是指向“拥有”结构的模块的指针。此字段用于防止模块在其操作正在使用时被卸载。几乎所有时间,它都只是初始化为THIS_MODULE。
如果我们提到LDD-2,则说明是
“此字段不是像file_operations结构中的其他所有方法。而是指向”拥有“此结构的模块的指针;内核使用它来维护模块的使用计数。”< / p>
现在我的问题是这个字段实际上是如何阻止模块被卸载的?
谢谢,
答案 0 :(得分:1)
当打开使用这些操作的文件时,在调用.open()
文件的操作之前,会为try_module_get()
模块调用函数.owner
。这会增加模块的使用计数器,因此无法使用rmmod
命令卸载模块。
当删除对文件的最后一次引用并完成其.release()
操作时,将为module_put
模块调用函数.owner
。这会减少模块的使用计数器,因此可以再次卸载模块(除非其参考计数器因其他原因而增加)。