毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> linux >> 正文

error inserting 'hello.ko',-1 Invalid module format

更新时间:2013-2-26:  来源:毕业论文

error inserting 'hello.ko',-1 Invalid module format
======================================================================*/#include <linux/init.h> #include <linux/module.h> MODULE_LICENSE("Dual BSD/GPL"); static int hello_init(void) {   printk(KERN_INFO " Hello World enter\n");   return 0; }   static void hello_exit(void) {   printk(KERN_INFO " Hello World exit\n "); }   module_init(hello_init); module_exit(hello_exit);   /* MODULE_AUTHOR("Song Baohua"); MODULE_DESCRIPTION("A simple Hello World Module"); MODULE_ALIAS("a simplest module"); */

#KERNELDIR = /usr/src/kernels/2.6.18-164.el5-i686 #PWD := ($shell pwd) #INSTALLDIR = $(PWD) #CC=gcc obj-m := hello.o 
还有我用的是红帽企业版5.4,原始内核是2.6.18,用这个内核启动的话,运行insmod -C /usr/src/kernels/2.6.18-164.el5-i686 后再insmod可以正常加载。
后来我下载了2.6.34.13的源码(源码目录 /usr/src/linux-2.6.34.13),以前编译过一次。但用这个内核启动时,运行insmod -C /usr/src/linux-2.6.34.13后用insmod就会出现上图中的情况。网上说出现这种问题一般是内核版本号跟要加载的内核模块版本号不一致,但我这里貌似是一致的吧?怎么回事?毕业论文 
看看Makefile中的内核模块源码的目录,是不是在你机器上可以找到。

三个内核,都试了,只需改下内核源码路径就OK了!!!(我新编译的那个2.6.34也比我之前的版本高)
ifneq ($(KERNELRELEASE),)   obj-m :=hello.o   elseKDIR:= /lib/modules/2.6.34.12/build   all:         make -C $(KDIR) M=$(PWD) modules clean:         rm -f *.ko *.o *.mod.o *.mod.c *.symvers   endif

这是内核源码的目录结构
[Og@localhost ~]$ ls /lib/modules/
2.6.32-279.9.1.el6.x86_64  2.6.32-279.el6.x86_64  2.6.34.12
[Og@localhost ~]$ ls /lib/modules/2.6.34.12/
build              modules.ccwmap       modules.isapnpmap  modules.symbols
kernel             modules.dep          modules.ofmap      modules.symbols.bin
modules.alias      modules.dep.bin      modules.order      modules.usbmap
modules.alias.bin  modules.ieee1394map  modules.pcimap     source
modules.builtin    modules.inputmap     modules.seriomap
[Og@localhost ~]$ ls /lib/modules/2.6.34.12/build
arch           firmware          kernel           Module.symvers  sound
block          fs                lib              net             System.map
COPYING        include           MAINTAINERS      README          tools
CREDITS        init              Makefile         REPORTING-BUGS  usr
crypto         initrd-2.6.34.12  mm               samples         virt
Documentation  ipc               modules.builtin  scripts         vmlinux
drivers        Kbuild            modules.order    security        vmlinux.o
[Og@localhost ~]$

你还是看一下你的编译完的内核源码路径吧!
出现这个错误一般是没找到内核源码
1,如果要在x86上练习模块,两种选择要么直接用当前系统内核源代码编译模块,我的RHEL6.3上是带有当前用的内核版本的内核代码的
2,用你想用的代码版本,自己下载的,(可能和你的PC机的内核一个版本也要照下边做),编译内核,编译内核模块,安装内核模块,制作initrd,修改grub,用你现在的内核启动,然后就可以用自己下载的内核版本来编译内核模块了

版本一样,但是一个是系统带的,一个是下载的是很有可能失败的,我试了一下用modinfo打印出版本信息一样也出错。

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。