我照着Linux设备驱动程序(第二版)中,第二章编辑了hello.c,清单:
#define MODULE
#include
1<linux module.h="">
2
3int init_module(void) { printk("<1>Hello, world\n"); return 0;}
4void cleanup_module(void) { printk("<1>Goodbye cruel world\n");}
5
6用gcc -c hello.c 编译,但是出来很多错误,都是<linux module.h="">里边的,好像是什么地方没有设置对。
7我刚学内核编程,请各位高手指点一下。
8\---------------------------------------------------------------
9
10当然不能用gcc -c 编译了!
11你没有看到他的makefile文件么? 要用-O选项优化呢!
12我建议你先看一看makefile文件施用什么编译的噢!!
13\---------------------------------------------------------------
14
15这样简单的例子不需要makefile,如果你对makefile非常熟悉的话也可以写一个。使用下面的命令就行了。
16
17gcc -c -D__KERNEL__ -I/usr/src/linux-2.4/include hello.c
18\---------------------------------------------------------------
19这个问题我已经解决了,我在hello.c中增加了 #include<asm atomic.h="">,然后用gcc -c hello.c 编译,顺利通过,insmod -f ./hello.o 成功。
20
21但是有又编写了一个小模块a.c,gcc -c a.c 顺利通过,但是在insmod时没有成功,总是出现这个提示:couldn't find the kernel version the module was compilled for.
22我是 insmod (-f)./a.o ,在带有-f参数和不带的时候都是如此。请问这个问题怎么解决?
23
24\-----------------------------------------------------------------------------
25
26我也是刚刚接触内和,但我是这样做的:
27gcc -D__KERNEL__ -I/usr/src/linux-2.4.18-14/include -DMODULE -Wall -O2 -c hello.c -o hello.c
28
29然后:insmod hello.o
30由警告,但可以顺利加载</asm></linux></linux>