参考LDD-3 pg-50。上面写着
struct module *owner第一个file_operations字段根本不是一个操作;它是一个指向“拥有”结构的模块的指针。此字段用于防止在使用模块的操作时将其卸载。几乎所有时候,它都被简单地初始化为THIS_MODULE。
如果我们参考LDD-2,解释是
此字段不像file_operations结构中的所有其他字段那样是一种方法。相反,它是指向“拥有”此结构的模块的指针;内核使用它来维护模块的使用计数。
现在我的问题是,这个字段实际上是如何阻止模块被卸载的?
谢谢,
发布于 2018-01-28 02:51:00
当打开使用这些操作的文件时,在调用.open()文件的操作之前,会为.owner模块调用函数try_module_get()。这会增加模块的使用计数器,因此不能使用rmmod命令卸载模块。
当删除对文件的最后一个引用并完成其.release()操作时,将为.owner模块调用函数module_put。这会递减模块的使用计数器,因此模块可以再次卸载(除非它的引用计数器由于其他原因而递增)。
https://stackoverflow.com/questions/48478978
复制相似问题