uSE Linux 10.1下ldd3 hello world例子Invalid module format问题
我的系统是SuSE Linux 10.1,kernel version是2.6.16.13
我的hello.c和Makefile都是按照ldd3上来写的。
hello.c的代码如下:
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk(KERN_ALERT "Hello, world\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, cruel world\n");
}
module_init(hello_init);
module_exit(hello_exit);
Makefile如下:
ifneq ($(KERNELRELEASE),)
obj-m := hello.o
else
KERNELDIR ?=/lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
# $(MAKE) -C /usr/src/linux-2.6.16.13 M=$(PWD) modules
clean:
rm -rf *.o .*.cmd *.ko *.mod.c .tmp_versions *~
endif
我的源码数的路径为/usr/src/linux-2.6.16.13-4-obj/i386/default/
下面是我的一些信息,请帮忙看看,几天了一直没有找到解决方法
#make
make -C /lib/modules/2.6.16.13-4-default/build M=/software modules
make[1]: Entering directory `/usr/src/linux-2.6.16.13-4-obj/i386/default'
CC [M] /software/hello.o
Building modules, stage 2.
MODPOST
CC /software/hello.mod.o
LD [M] /software/hello.ko
make[1]: Leaving directory `/usr/src/linux-2.6.16.13-4-obj/i386/default'
#insmod hello.ko
insmod: error inserting 'hello.ko': -1 Invalid module format //老是这个问题
#insmod -f hello.ko
insmod: error inserting 'hello.ko': -1 Invalid module format
#cat var/log/message
Nov 5 20:42:45 Love-Linux kernel: hello: disagrees about version of symbol struct_module
#uname -r
2.6.16.13-4-default
#cat /lib/modules/2.6.16.13-4-default/build/include/linux/version.h
#define UTS_RELEASE "2.6.16-default"
#define LINUX_VERSION_CODE 132624
#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
#cat /usr/include/linux/version.h
#define UTS_RELEASE "2.6.16" //这里跟另外两个地方不一样
#define LINUX_VERSION_CODE 132624
#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
#cat /usr/src/linux-2.6.16.13-4-obj/i386/default/include/linux/version.h
#define UTS_RELEASE "2.6.16-default"
#define LINUX_VERSION_CODE 132624
#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
-----------------------------------------------------------------
我把/usr/include/linux/version.h下的
#define UTS_RELEASE "2.6.16" 改为 #define UTS_RELEASE "2.6.16-default"了,重启后insmod都还不行
这个问题都困扰我几天了,我无法解决,还请大家能指点一二