// redhat8, kernel 2.4.18, gcc 3.2
// test.c
#define MODULE
#include
1<linux module.h="">
2int init_module()
3{
4return 0;
5}
6void cleanup_module()
7{
8}
9//
10gcc -c test.c //no warnings
11但insmod test.o时的出错,大致意思是test.o 是compiled for kernel 2.4.9,but current kernel version is 2.4.18。
12哪位高手知道为什么??
13
14\---------------------------------------------------------------
15
16你修改一下头文件就可以了:
17在/usr/include/linux/version.h中修改一个
18#define GXXXXX_VERSION "2.4.9-19"之类的代码
19里面只有几行,很容易找到的。
20然后不用我说吧。把相应的"2.4.9-19"修改为"2.4.18-14"(Red Linux 8.0)就可以了
21重新编译。OK
22
23
24\---------------------------------------------------------------
25
26这个我早就想到并试过了,结果另外一个error message代替了“版本不符”!
27你自己试过没有?行了吗?
28\---------------------------------------------------------------
29
30楼上的没错,修改后确实会看上去可以insmod,你也可以查看到,但是我觉得其实这并没有解决问题。当时我的在
31int init_module()
32{ printk(“<1>this is module speaking”);
33return 0;
34}
35但是insmod后并没有任何消息
36\---------------------------------------------------------------
37
38OK,搞定了。
39对于版本不符问题,只改头文件不行,insmod时还是会有warning出来,其实只要将include/linux改到(ln -s)正确的内核源代码头或下载相符的kernel src和kernel headers就行了。
40至于printk()没反应,由于OS的buffer机制,这也是有可能发生的,但这并不代表module未load进来,建议netboylgl(echo) 使用其它的内核函数作测试,如在当前目录下建个文件等。</linux>