Unknown symbol __udivdi3 (err 0)

来源:互联网 发布:淘宝被扣48分保证金 编辑:程序博客网 时间:2024/05/19 04:03

     最近在调试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 u32Divided_64(__u64 a, __u64 b){__u64 result = a;if(b == 0) {return 0;}do_div(result, b);return (u32)result;}




     







原创粉丝点击