drivers/built-in.o:(.data+0x0): undefined reference to `__this_module'

最近学习Linux 驱动,自己动手写了一个温度传感器的I2C驱动模块,调试完成后想试着把驱动模块编译进Linux 内核中,开机启动就不用insmod了,配置完Kconfig后编译一直出现“drivers/built-in.o:(.data+0x0): undefined reference to `__this_module'”的问题,导致内核编译失败。检查了多遍确认加入了“#include <linux/module.h>”头文件还是会出现这个问题,百度多遍依旧没相关的解决方案。第二天反复查看代码终于发现问题:之前学习写驱动模块按照教程在代码头部加入了宏定义。

#ifndef MODULE
#define MODULE
#endif

该宏定义导致<include/linux/module.h>中THIS_MODULE被定义为#define THIS_MODULE (&__this_module),而在编译进内核的时候__this_module没有定义于是出现“undefined reference to `__this_module'”问题。将#define MODULE注释后内核编译通过,上电顺利启动,驱动加载成功。

#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的理解:https://blog.csdn.net/heybeaman/article/details/79583649 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值