第一次编内核模块

2008-03-23 15:13:58 / 个人分类:linux应用

内核模块的结构特点及运行环境和普通程序有很大不同。
ubm/N|?0模块编写的语法和C语法相差无几,但如果能真正理解模块运行的特点,还需要知道硬件和操作系统的一些知识。
w {K \:QQ$X`)qjs0我第一次编译内核模块的经历:

lzel@lzel-laptop:~/Module$ ls
0uV5RF'sr/x0 hellomod.c  Makefile  modutils-2.4.27  常用资料
TNO8F5L4\W0lzel@lzel-laptop:~/Module$ LUPA开源社区 Q4q6g Am%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");
!gs'?y9@8C0lzel@lzel-laptop:~/Module$ cat Makefile
#W }"B m9@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}i9r nE [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%pc"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
W dq7~._7i0hellomod.c                       hellomod.mod.c  hellomod.o      Module.symvers   常用资料LUPA开源社区#qz6^x#A7V \
lzel@lzel-laptop:~/Module$ sudo insmod hellomod.ko LUPA开源社区$~ X,K/OPM-{F _q
lzel@lzel-laptop:~/Module$ lsmod
,z p9@ H y,D0Module                  Size  Used by
C%e.J*E v,c;W0hellomod                2560  0 LUPA开源社区I nO2`#QT
nls_iso8859_1           5120  1
*{4xQ5k9v;jPL Q {i6I{0.....................................LUPA开源社区;D;d0A+[Z
lzel@lzel-laptop:~/Module$ dmesg
!]xb_9`h0.....................................LUPA开源社区 chbV$u
[ 1121.812000] Hello,World!from the kernel space...
y6{:pg;WZ})p{0lzel@lzel-laptop:~/Module$ sudo rmmod hellomod LUPA开源社区dD3ZZ%z5|J(q2^E
lzel@lzel-laptop:~/Module$ lsmod |less
U)s6DDB5`0Module                  Size  Used byLUPA开源社区-Z(W A"s4f$h
nls_iso8859_1           5120  1
Di}f&i0....................................LUPA开源社区0VN}h7c1f1zrym
lzel@lzel-laptop:~/Module$ dmesgLUPA开源社区xXFDx \-dF
[ 1331.104000] Goodbye,World!leaving kernel space..
&t%AV4E6WI&S0lzel@lzel-laptop:~/Module$ cat /var/log/syslog|less
c%U0w8w"N'qL0......................................
\5^ pY(Rlh4j#O h0Mar 21 14:04:48 lzel-laptop kernel: [ 1317.028000] Hello,World!from the kernel space...LUPA开源社区V _dlN8u5[B7u
Mar 21 14:05:02 lzel-laptop kernel: [ 1331.104000] Goodbye,World!leaving kernel space..
*F&~'R u\(qF'O9B0LUPA开源社区Iu1uLo
刚刚并不是这么顺利:
5ha/I&wZ/aI01.modutils 工具没安装,insmod,rmmod,lsmod等都用不了LUPA开源社区 ?mL,?fp0o;b\
modutiles-2.4.27下载地址:
ZH H"P@-G0http://down1.chinaunix.net/distfiles/modutils-2.4.27.tar.bz2LUPA开源社区}Ak-E4Y'riR
2.要特别注意你的linux操作系统的内核版本LUPA开源社区L y Y@h)f*eRSp
用ls /usr/src/LUPA开源社区NLb&`:v8M
我在Ubuntu下是:
&ZSP%]ts0linux-headers-2.6.22-14  linux-headers-2.6.22-14-genericLUPA开源社区,K q,}I u:_,xCaR
Redhat 6.0下为:LUPA开源社区u/Y#Xxk"Kw
kernels RedhatLUPA开源社区D*SY5m5V
必须进入kernels
EhK?E@l0ls /usr/src/kernels/LUPA开源社区4XI2~ bZZ
有2.6.22.6-1-i686
3Lbo1u8B0然后用make -C /内核路径 SUBDIRS=$PWD modules编译(注意:超级用户权限)
+vy#N ^!s'wJ"x03.将模块插入内核和清除内核LUPA开源社区&@SB0aJF I*F
分别用insmod [module.ko(2.6以上版本)]和 rmmod [module]
+l Fky8L!Z04.查看运行情况:LUPA开源社区:a {%Lt+F"` pb
  1)dmesg命令LUPA开源社区#ew FGu F
  2)cat或tail或head /var/log/syslog(message)LUPA开源社区npje^K(AJsO
具体可参看上述操作,第一次编译内核,还有很多不知道的地方,望各位不吝赐教啊。
8~"}}w;uA,s0


TAG: 编译 Linux应用 linux应用

因为喜欢,所以选择 删除 lizeliang.linux 发布于2008-03-23 15:53:52
谢谢!
不过我们大多数人都正在用Ubtunu,出了问题大家也好商议。
删除 kongove 发布于2008-03-23 15:25:57
我感觉ubuntu内核编译没有红帽、红旗这些好。建议在初期使用比较顺手的。
我来说两句

-5 -3 -1 - +1 +3 +5

Open Toolbar