insmod返回-1:Unkown symbol in module

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

背景:更新了驱动后,已将文件拷贝至指定文件夹下。惯例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_年少生而为人的博客-CSDN博客

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
"unknown symbol in module"错误通常是由于模块中存在未知的符号或无法解析的符号导致的。这个错误可能有以下几个原因: 1. 模块不存在或未正确导入:如果你尝试导入一个不存在的模块或者没有正确导入所需的模块,就会出现这个错误。请确保你已经正确安装了所需的模块,并且在代码中正确导入了这些模块。 2. 符号拼写错误:如果你在代码中使用了一个不存在的符号或者拼写错误,就会出现这个错误。请检查你的代码,确保所有的符号都正确拼写并且存在。 3. 版本不兼容:有时候,某些模块或库可能需要特定的版本才能正常工作。如果你使用的是不兼容的版本,就会出现这个错误。请检查你使用的模块或库的文档,确保你使用的是兼容的版本。 4. 编译错误:如果你在编译模块时出现了错误,就会导致这个错误。这可能是由于编译器或构建工具的问题导致的。请检查你的编译或构建过程,确保没有出现任何错误。 如果你遇到了"unknown symbol in module"错误,你可以尝试以下几个解决方法: 1. 确保你已经正确安装了所需的模块,并且在代码中正确导入了这些模块。 2. 检查你的代码,确保所有的符号都正确拼写并且存在。 3. 查看模块或库的文档,确保你使用的是兼容的版本。 4. 检查你的编译或构建过程,确保没有出现任何错误。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值