日期:2014-05-16  浏览次数:20655 次

我内核版本跟内核模块一致,但仍然insmod:error inserting 'hello.ko',-1 Invalid module format
如图:

版本号都是2.6.34.13
但仍然无法insmod。
下面是源码:
hello.c
C/C++ code

/*======================================================================
    A simple kernel module: "hello world"
         
    The initial developer of the original code is Baohua Song
    <author@linuxdriver.cn>. All Rights Reserved.
======================================================================*/
#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");
*/



//Makefile
C/C++ code

#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就会出现上图中的情况。网上说出现这种问题一般是内核版本号跟要加载的内核模块版本号不一致,但我这里貌似是一致的吧?怎么回事?

------解决方案--------------------
这个……

我三个内核,都试了,只需改下内核源码路径就OK了!!!(我新编译的那个2.6.34也比我之前的版本高)

这是我的Makefile

C/C++ code

ifneq ($(KERNELRELEASE),)

obj-m :=hello.o

else
KDIR:= /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

------解决方案--------------------
dmesg看看还有其他的信息不