学习linux设备驱动的编写的过程中,遇到加载驱动时出现1.Invalid module format的问题,
编译环境:PC Ubuntu 10.04(Linux-2.6.32)
比如编译2.6.31下的usbserial.ko,当insmod之后出现
XXX: error inserting 'XXX.ko': -1 Invalid module format
dmesg后有如下信息:
usbserial: no symbol version for module_layout
网络上查找信息,说是当前编译的源码版本跟系统内核的版本没有一致。我的源码是用Ubuntu自带的新立得下的,说版本不一致很让人费解。也有些人说是编译器版本不同造成的,觉得不太可能。完全不知道问题出在什么地方,网上找的帖子确实未能解决掉这个问题。后来经高手指点,
解决办法如下:使用PC自带的头文件,首先用uname -a查看自己内核版本,比如我的是:
Linux zy-desktop 2.6.32-21-generic #32-Ubuntu SMP Fri Apr 16 08:10:02 UTC 2010 i686 GNU/Linux
于是在Makefile中将路径改为:
KERNELDIR := /usr/src/linux-headers-2.6.32-21-generic
或者KERNELDIR := /usr/src/linux-headers-$(uname -r)
再次编译,成功通过。
--转自
该贴由koei123转至本版2015-6-1 15:09:18