驱动模块(ko)文件加载失败分析

              在实际工作中,通常出现SDk编译出来的驱动模块,在最小系统中加载失败,即insmod xxx.ko 失败,“disagree param with the version"等之类的提示。

1.分析内核版本, uname -a 一看,最小系统的内核版本和编译SDK的内核版本一样。(因为SDK编译出来就是一个驱动ko,以及在驱动的基础上做了一个适配库.so),所以SDK本质上就是一个内核模块驱动+适配层代码。自然在编译时是需要依赖内核的。纳闷了,内核版本一样,工具链也是一套的,编译出来的ko却加载失败。

2.通过分析编译最小系统的内核和编译SDK的内核,发现两个内核虽然版本一样,但两个内核配置不一样。即最小系统的内核代码在make menuconfig 对内核做了裁剪。问题有眉目了,可能是最小系统的内核做了裁剪,而SDK编译的内核没有同步更新,造成SDk编译的驱动在最小系统中找不到对应的依赖。

解决办法:

                 1.将最小系统的make menucofig所产生的.config 替换SDK编译的内核源码中,做到编译最新系统的内核源码和编译SDK的内核源码 .cofnig一致。

                  2.OK 问题解决

展开阅读全文

没有更多推荐了,返回首页