insmod modprobe加载驱动出现Invalid module format

本文详细介绍了如何通过调整Makefile中内核目录KDIR的值来解决Linux主机与目标机内核版本不一致导致的交叉编译问题。通过更改KDIR为目标机的内核目录路径,使得编译过程能够正确地针对目标机内核进行。同时,提供了具体步骤和示例代码,帮助开发者快速定位和解决此类问题。

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

出现这个的问题主要是linux主机的内核版本和目标机的版本不一致,其实交叉编译是不会理会编译主机的内核版本的,但是还需要指定目标机的内核位置,如:

 选取一个驱动的Makefile文件

obj-m := mchpar1xxx.o

KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)


default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules 
gcc -o inputactivate inputactivate.c
gcc -o inputverify inputverify.c

clean:
rm -f *.o *.cmd *.mod.c .*.o* .*.ko* *~ *.ko inputactivate inputverify
rm -rf .tmp_versions/


其中的KDIR指的是内核目录,这里指向的是主机的/lib/modules/...文件夹,最后找到的是主机的3.11版本,修改KDIR

指定为目标机内核的目录:

KDIR := /home/program/I.MX53/kernel-source/linux-2.6.35.3

这样重新编译驱动,就可以正常加载了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值