THIS_MODULE
是一个macro
,定义在<linux/module.h>
中:
#ifdef MODULE
#define MODULE_GENERIC_TABLE(gtype,name) \
extern const struct gtype##_id __mod_##gtype##_table \
__attribute__ ((unused, alias(__stringify(name))))
extern struct module __this_module;
#define THIS_MODULE (&__this_module)
#else /* !MODULE */
#define MODULE_GENERIC_TABLE(gtype,name)
#define THIS_MODULE ((struct module *)0)
#endif
THIS_MODULE
即是__this_module
这个变量的地址。__this_module
会指向这个模块起始的地址空间,恰好是struct module
变量定义的位置。
file_operations
结构体的第一个成员是struct module
类型的指针,定义在<linux/fs.h>
中:
struct file_operations {
struct module *owner;
......
}
LDD
对其的解释:
struct module *owner
The first file_operations field is not an operation at all; it is a pointer to the module that “owns” the structure. This field is used to prevent the module from being unloaded while its operations are in use. Almost all the time, it is simply initialized to THIS_MODULE , a macro defined in <linux/module.h>.
owner
指向绑定file_operations
的模块。在大多时候,只需把THIS_MODULE
赋给它即可。
参考资料:
Where is the memory allocation of “_thismodule” variable?;
深入淺出 insmod, #1。