insmod返回-1:Unkown symbol in module

在更新驱动后,尝试加载ko模块时遇到insmod错误Unknownsymbolinmodule。问题源于在32位Linux系统中使用了64位除法操作。通过检查发现int64_t类型的变量导致了此问题。采用div_u64函数替代原有的除法运算,解决了兼容性问题,成功加载并运行驱动。

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

背景:更新了驱动后,已将文件拷贝至指定文件夹下。惯例insmod装载驱动时,报错信息

insmod: error inserting 'ecg_dev.ko': -1 Unknown symbol in module

无法识别该驱动,但是该驱动已经通过make module的编译。

通过查询资料发现,返回-1情况有很多种,仅仅是Unknown symbol in module这个报错,都有很多可能。

于是排查驱动内更新的地方-----做了一个 “ / ” 除法运算,同时上述报错的可能中,恰恰存在运行除法报错。于是寻求解决办法,结果如下:

报错原因:在32位的Linux系统下运行64位的除法---其中有一个变量我用的int64_t 类型,相当于long long。

查询系统位数:                                     其中armv7l 代表为32位系统。

uname -a
Linux scu 3.2.0 #9 Mon Oct 12 16:50:45 CST 2015 armv7l GNU/Linux

后续对函数的更替,参考文章:

Linux内核之32/64位除法_div_s64_年少生而为人的博客-优快云博客

考虑我变量所存的数值,我使用div_u64来进行替换,不需要余数(返回值),且将结果保存至第一参数内。随后编译再装载,正常运行,问题解决。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值