最近在调试wlan驱动模块时出现如下错误:
[ 17.940000] qca_ol: Unknown symbol __udivdi3 (err 0)
insmod: can't insert '/lib/modules/qca_ol.ko': unknown symbol in module, or unknown parameter
这个错误导致qca_ol.ko无法挂载从而导致一系列错误。编译时也会提示如下警告:
WARNING: "__udivdi3" [/home/master-trunk/project/oem/modules/wlan-10.4-spf50/os/linux/../../qca_ol/qca_ol.ko] undefined!
查阅资料后发现原因是因为嵌入式32位系统中的除法操作(如:a/b),当a为64位变量时不能直接使用除法符号‘/’,否则就会出现上述错误。如果必须做64位除法应该使用函数do_div(a,b),
注意次函数的返回值为余数,最终的结果保存在a变量中
。
针对do_div()的这种特性我们可以封装一个自己的除法函数:
static u32
Divided_64(__u64 a, __u64 b)
__u64 result = a;
if(b == 0) {
return 0;
do_div(result, b);
return (u32)result;
最近在调试wlan驱动模块时出现如下错误:[ 17.940000] qca_ol: Unknown symbol __udivdi3 (err 0)insmod: can't insert '/lib/modules/qca_ol.ko': unknown symbol in module, or unknown parameter 这个错误导致qca_ol.ko无法
报错如下:
通过参考博客:http://blog.chinaunix.net/uid-20717979-id-3351360.html 后发现是数据类型问题,但是作者提供的思路没有解决,于是去lib/printfmt.c文件中做类型强转换后运行成功
printnum(putch, putdat, num / base, base, width - 1, padc);
printnum(putch, putdat, (uint32_t)num / (uint32_t)base, bas
(转载注:这篇文章对于我有很大的帮助,只看了一半就把目前手上的内核线程的问题解决了,而这个问题之前并没有找到合适的解决方法)
原文地址:http://yijunzhu.diandian.com/?tag=%E5%86%85%E6%A0%B8
编译Linux下面的代码,经常会遇到这种错误:
undefined reference to `__udivdi3'
【解决过程】
...
Android 编译错误undefined symbol分析与解决方案
最近在Android Q上写一个bin文件时遇到编译报错的问题,具体报错如下:
ld.lld: error: undefined symbol: android::RefBase::decStrong(void const*) const
>>> referenced by StrongPointer.h:182 (system/core/libutils/include/utilsPointer.h:182)
git error:error: RPC failed; curl 56 GnuTLS recv error (-54): Error in the pull function.
25669