insmod: can't insert 'led.ko': invalid module format

 

之前在Imx257学习版固件编写的驱动想直接移植imx257核心板的开发板上。以为2个板子的源码的引脚定义一样就没什么问题了。殊不知问题很多。

我们输入dmesg |tail
 


在log中我们看到2个版本不匹配。

 

在这儿我们需要明白一个原理,我们编译驱动程序的Makefile

 

 
有一个KDIR指的是Linux源码文件,那个源码文件一定是编译过内核的源码文件那个内核应该就是你目标板正在运行的内核。

 

如果没有你的Makefile没有满足上述的情况你可能会出现下面情况

 

一、内核是纯净的没有编译过

 

 

 

你编译这个驱动可能会提示你丢失文件,或者出现内核的警告,即使生成了驱动文件加载也是失败,也许还看不到log

 

2、是编译过得内核但是内核的版本不对
我的项目使用周立功的固件,我是在学习版固件编写驱动自然在学习板上面加载都是ok。后面正式的项目改为工业板的固件,发现他们的内核版本的信息不对,导致出现上面的问题。解决方法
1、可以在编译内核的时候禁止内核加载驱动时进行版本检测(特殊情况这样处理)
2、使用正确的内核环境编写,就是用工业板的固件环境进行驱动编写
3、编译过的内核环境但编译的.config不一样
我们看驱动的Makefile中并没有写明编译的交叉工具链why?
因为驱动的编译会使用编译内核的交叉工具链,如果内核.config写错了,交叉工具链应该也是不对。那么我们的驱动编译的交叉工具链也会写错

 

我们可以使用如下命令查看

 

 

 
错误

 

观看vermagic 看到了gcc么这不是gcc编译的么,我需要arm-Linux-gcc。

总结
KDIR指的是Linux源码文件,那个源码文件一定是编译过内核的源码文件。那个内核应该就是你目标板正在运行的内核。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值