Linux加载驱动"invalid module format"错误的一种可能解决办法

本文介绍了解决Linux驱动加载时出现“invalid module format”错误的过程。通过调整编译配置,特别是使能EABI,最终成功解决了该问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       日前临时维护之前同事写的一个简单linux驱动,遇到了很常见的一个问题,加载驱动时报错:“invalid module format”。

   用readelf -h得到的报错的驱动文件信息如下:



   而正确的驱动文件是这样的:



   可以明显的看到:两个文件差别在于的magic、OS\ABI、flags不一致,尤其是OS/ABI!但却并不清楚它们的含义和区别。我们认为这应该是编译器或内核版本不一致造成的。但是设备上的内核与编译的内核都是同一个版本,于是我们就怀疑是编译器的问题。而设备的dmesg打印显示却是同一个编译器所编译的。后面又检查了许多东西:$PATH,makefile,ARCH,CROSS_COMPILE等,各种方法试了很久,但是都没有找到原因。最后发现是menuconfig的设置有问题,没有使能EABI,需要选定下面两个选项(make menuconfig ARCH=arm,请无视花屏,secureCRT下截的图):

    Kernel Features --->

                [*] Use the ARM EABI to compilethe kernel

                [*] Allow old ABI binaries torun with this kernel (EXPERIMENTAL)




clean后再make就好了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值