insmod: error inserting 'xxx.ko': -1 Invalid module format

乘着实验机器在编译内核,把以前遇到的一个问题也总结一下,本来之前运行得好好地模块,后来怎么突然不行了呢,具体问题如下:

该问题表示:内核模块编译的环境与现在insmod想要运行的环境不一致

这个可能是我们编译了模块之后,重启了电脑,然后内核版本被更改了,例如我这个kthread.ko是在linux-3.10下编译的,但是我现在重启电脑之后是在linux-3.13内核版本下。所以在linux-3.13内核版本下无法运行linux-3.10编译的模块,即模块没有跨内核版本的特性。

查看内核版本命令:

uname -r 

解决方案主要有两个:

1、切换回原来编译的内核版本

如果模块是对应着内核代码的,比如我在3.10内核版本代码添加了自己的内容,现在这个模块必须要使用这个内容才行,那么就需要我切换回原来编译的内核版本。或者需要在特定的内核版本做测验时,需要将内核版本切换回去。

2、在当前内核环境下重新编译模块

如果模块对于内核版本没有要求,随便在什么版本内核下都可以完成自己想要做的任务,那么就可以直接在该版本内核下重新编译模块。

如上所示直接使用make进行重新编译,或者:

make clean 
make

这种情况需要在Makefile没有指定确定的内核路径才可以,例如我这里的Makefile文件内容为:

obj-m := kthread.o
KERNEL_DIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
all:

	make -C $(KERNEL_DIR) SUBDIRS=$(PWD) modules
clean:  

	rm *.o *.ko *.mod.c *.order *.symvers
.PHONY:clean

Makefile文件一定要注意缩进,前面为tab,不是空格!

在这种情况下,重新编译之后,再插入模块即可:

由上可以看到插入模块成功,可以进行相应的测试了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值