编译模块时遇到Invalid module format
来源:互联网 发布:淘宝网店实名认证照片 编辑:程序博客网 时间:2024/04/20 14:17
加载模块:sudo insmod dnw_usb.ko
insmod: error inserting 'dnw_usb.ko': -1 Invalid module format
查看内核版本:uname –a
Linux ubuntu 3.2.0-29-generic-pae #46-Ubuntu SMP Fri Jul 27 17:25:43 UTC 2012 i686 i686 i386 GNU/Linux
查看模块信息:modinfo dnw_usb.ko
filename: dnw_usb.ko
license: GPL
srcversion: B52853423AD4901986E4D47
depends:
vermagic: 2.6.32-279.el6.i686 SMP mod_unload modversions 686
1.Invalid module format
编译环境:PC Ubuntu 9.10(Linux-2.6.31)
比如编译2.6.31下的usbserial.ko,当insmod之后出现
insmod: error inserting 'usbserial.ko': -1 Invalid module format
dmesg后有如下信息:
usbserial: no symbol version for module_layout
网络上查找信息,说是当前编译的源码版本跟系统内核的版本没有一致。这就无法理解了,我的源码是用Ubuntu自带的新立得下的,说版本不一致很让人费解。至于相关的信息可查看:内核模块加载时的版本检查
也有些人说是编译器版本不同造成的,觉得不太可能。而且也有高人指点,明确这跟编译器无关,就是源码问题。网上找的帖子确实未能解决掉这个问题。
解决办法:使用PC自带的头文件,首先用uname -a查看自己内核版本,比如我的是:
Linux Pro 2.6.31-15-generic #50-Ubuntu SMP Tue Nov 10 14:54:29 UTC 2009 i686 GNU/Linux
于是在Makefile中将路径改为:
KERNELDIR := /usr/src/linux-headers-2.6.31-15-generic
或者KERNELDIR := /usr/src/linux-headers-$(uname -r)
再次编译,成功通过。
2.insmod时出现Unknown symbol in module
添加MODULE_LICENSE("GPL");
=============简 单 的 分 割 线=============
同样在PC下编译内核驱动模块。这次的原因是编译工具版本不一致导致的问题。
具体现象如下:
编译后的.ko可以insmod,但是无法rmmod。执行rmmod,会提示“ERROR: Removing 'hello': Device or resource busy”。
使用rmmod -f命令也不行。
使用lsmod查看,则会显示permanent信息,表示无法卸载模块。
hello 12448 0 [permanent]
原因:
系统默认的内核使用gcc版本与当前编译模块的gcc不同导致。
解决办法:(ubuntu 12.04)
查看系统内核模块的编译信息:
$ cd /lib/modules/`uname -r`/build/include/generated/
$ cat compile.h
显示信息为:
/* This file is auto generated, version 70-Ubuntu */
/* SMP */
#define UTS_MACHINE "i386"
#define UTS_VERSION "#70-Ubuntu SMP Wed May 29 20:31:05 UTC 2013"
#define LINUX_COMPILE_BY "buildd"
#define LINUX_COMPILE_HOST "allspice"
#define LINUX_COMPILER "gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) "
可以看到官方编译的gcc版本为4.6.3
修改Makefile,如下:
KERNELDIR=/usr/src/linux-headers-$(shell uname -r)
obj-m := hello.o
all:
make modules -C $(KERNELDIR) M=$(PWD) cc=gcc-4.6
clean:
make clean -C $(KERNELDIR) M=$(PWD)
再次编译后,问题解决。
- 编译模块时遇到Invalid module format
- 模块编译成功插入时候 打印 -1 invalid module format
- 加载模块时 Error inserting -1 Invalid module format 错误
- 模块加载时 insmod “Invalid module format ”问题解决
- insmod驱动模块 出现 Invalid module format
- ubuntu加载模块出现Invalid module format
- 插入内核模块失败提示"Invalid module format"
- insmod 时出现Invalid module format
- insmod 时出现 "Invalid module format"
- insmod 时出现 "invalid module format"
- invalid module format问题
- insmod Invalid module format
- module编译和insmod invalid format问题解决方法
- module编译和insmod invalid format问题解决方法
- module编译和出现insmod invalid format问题的解决
- module编译和insmod invalid format问题解决方法
- 正确解决 Invalid module format
- 编译遇到object file format invalid or unsuitable
- VMware虚拟机如何使用
- SDUT 3344 数据结构实验之二叉树五:层序遍历
- 【贪心+优先队列】1428 活动安排问题【51nod】【难度:2级算法题】
- hdoj2029
- Hibernate_ManyToMany_Demo
- 编译模块时遇到Invalid module format
- 动态规划-3003-序列的最大上升子序列
- SourceInsight代码工程
- 统计学 入门基础概念篇 - Descriptive Statistics: Quantitative Measures(个人笔记)
- 环境变量的访问及设置
- SM2第二十一篇:OpenSSL中关于RSA_new和RSA_free的内存泄漏(CRYPTO_cleanup_all_ex_data)
- echo命令的-n、-e两个参数
- 【java并发】传统线程技术中创建线程的两种方式
- 数据结构实验之二叉树二:遍历二叉树