linux THIS_MODULE宏

本文详细解析了THIS_MODULE宏在Linux驱动模块中的功能与实现方式,阐述了其如何指向module结构体,以及在模块编译过程中的关键作用。通过分析__this_module结构体的生成和使用,揭示了Linux kbuild体系下模块编译的内部机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值