定义:
#ifdef MODULE
extern struct module __this_module;
#define THIS_MODULE (&__this_module) // 指向module结构体的指针
#else
#define THIS_MODULE ((struct module *)0) // 空
#endif
当驱动被编译成模块时THIS_MODULE 保存的是__this_module的地址.__this_module结构体由modpost程序生成.在执行编译模块的命令make modules同时所在模块的目录会生成一个 模块名.mod.c以及目标文件 模块名.mod.o
打开模块名.mod.c文件的内容,如下:
struct module __this_module
__attribute__((section(".gnu.linkonce.this_module"))) = {
.name = KBUILD_MODNAME, // KBUILD_MODNAME是Linux kbuild的体系在编译模块的时候生成的
.init = init_module,
#ifdef CONFIG_MODULE_UNLOAD
.exit = cleanup_module,
#endif
.arch = MODULE_ARCH_INIT,
};
KBUILD_MODNAME是Linux kbuild的体系在编译模块的时候生成的,init_module为am335x_gpio_init函数的别名,cleanup_module为am335x_gpio_exit的别名,请参考module_init宏