第一次编内核模块
2008-03-23 15:13:58 / 个人分类:linux应用
内核模块的结构特点及运行环境和普通程序有很大不同。
ubm/N|?0模块编写的语法和C语法相差无几,但如果能真正理解模块运行的特点,还需要知道硬件和操作系统的一些知识。
w{K\:QQ$X`)qjs0我第一次编译内核模块的经历:
lzel@lzel-laptop:~/Module$ ls
0uV5R F'sr/x0 hellomod.c Makefile modutils-2.4.27 常用资料
T NO8F5L4\W0lzel@lzel-laptop:~/Module$ LUPA开源社区 Q4q6gAm%N,V/kQ
lzel@lzel-laptop:~/Module$ cat hellomod.c
*F)}3ZT\0#include <linux/module.h>
(dXv-b6M3n4l(t_0#include <linux/kernel.h>
h&OK%`4]W+D#`
Q6n0#include <linux/init.h>
static int __init lkp_init(void)LUPA开源社区rT"r6n9y)qWC
{
I^l(JUKR0 printk("<1>Hello,World!from the kernel space...\n");LUPA开源社区#ssGI0k
return 0;LUPA开源社区?GEI+Y'UN
}LUPA开源社区
S:l7o j,|-G4m
static void __exit lkp_cleanup(void)
gL'_ XK'c$e,si0{LUPA开源社区
Oz$PMV
printk("<1>Goodbye,World!leaving kernel space..\n");LUPA开源社区R2[md,A
}LUPA开源社区A s2YbyS
module_init(lkp_init);
hWaM
ot/F
uq0module_exit(lkp_cleanup);LUPA开源社区2hm*opa#JJEg
MODULE_LICENSE("GPL");
!g s'?y9@8C0lzel@lzel-laptop:~/Module$ cat Makefile
#W }"Bm9@tno{E7o.B0W-~0obj-m +=hellomod.oLUPA开源社区|,PC"u+b1`/}q
all:
jQD.l3a$j0 make -C /usr/src/linux M=$(PWD) modules
4yNqz`-~4h0clean:LUPA开源社区fj%?(l/g+@
make -C /usr/src/linux M=$(PWD) clean
^ i1zZ)Za#v#y0lzel@lzel-laptop:~/Module$ ls /usr/src/
k;j}i9rnE
[U0gcc-4.2 linux-headers-2.6.22-14 linux-headers-2.6.22-14-generic
\}"BbiZ-Q3fO0lzel@lzel-laptop:~/Module$ sudo make -C /usr/src/linux-headers-2.6.22-14-generic SUBDIRS=$PWD modules
V"[(T
z7GVb(P-c'R0make: Entering directory `/usr/src/linux-headers-2.6.22-14-generic'
9q
C)QS+e*{F,l0 CC [M] /home/lzel/Module/hellomod.oLUPA开源社区G}9q~CHT
Building modules, stage 2.
-m0{ gR0[ T0 MODPOST 1 modulesLUPA开源社区[m+I2jdv@o
CC /home/lzel/Module/hellomod.mod.o
+}+Kk'jT0 LD [M] /home/lzel/Module/hellomod.koLUPA开源社区N%p c"u7G
rc2Q
make: Leaving directory `/usr/src/linux-headers-2.6.22-14-generic'LUPA开源社区I Id6z#nV
lzel@lzel-laptop:~/Module$ lsLUPA开源社区5L'l^
r-m3dgi|vr
hellomod.ko hellomod.mod.o Makefile modutils-2.4.27