背景:更新了驱动后,已将文件拷贝至指定文件夹下。惯例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来进行替换,不需要余数(返回值),且将结果保存至第一参数内。随后编译再装载,正常运行,问题解决。