insmod: ERROR: could not insert module exp.ko: Unknown symbol in module

本文详细介绍了在尝试插入内核模块时遇到的'Unknown symbol in module'错误,通过dmesg获取报错信息,发现是Makefile配置问题导致exps_init未被编译进模块。调整Makefile将所有相关源文件编译在一起,或合并源文件,即可解决此问题。同时,文中还提到了其他可能导致此类错误的原因,包括gcc版本不匹配和模块依赖项未加载,并提供了相应解决方案的链接。
摘要由CSDN通过智能技术生成

最近搞内核实验bug实在太多,每次都得重新编译内核,所以把部分代码先移植到模块里进行测试,测试无bug后再移植到内核代码中。

刚一转换成模块,问题就来了:

insmod: ERROR: could not insert module exp.ko: Unknown symbol in module

很直接,模块中存在未知的符号!

这个时候又需要dmesg来打印一下信息了~ 使用dmesg命令打印出了如下的信息,从这个信息就可以很明确的看到是符号exps_init Unknown,接下来就顺着报错信息和dmesg给出的线索来进行排查~

[  412.332317] exp: Unknown symbol exps_init (err 0)

其实在移植到模块的时候就意料到了会出这样的问题,我的exps_init其实并没有被链接进入到我的模块代码里面。

模块代码一共包含3个.c文件:

exp.c

exps.c

exp.h

exp.c和exps.c都包含exp.h,exps.c类似于工具函数,里面的内容被exp.c中调用

其中exps_init定义在exps.c文件中,但是Makefile文件却只编译了exp.c,所以要将exps.c一块编译进去。

原始报错Makefile:

ifneq ($(KERNELRELEASE),)
obj-m:=exp.o
else
 
#generate the path
CURRENT_PATH:=$(shell pwd)
CONFIG_MODULE_SIG = n
#the abs
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值