linux THIS_MODULE宏

定义:

#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宏

猜你喜欢

转载自blog.csdn.net/qq_36412526/article/details/84140283