Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2242125
  • 博文数量: 395
  • 博客积分: 10994
  • 博客等级: 上将
  • 技术积分: 5586
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-17 19:49
文章存档

2014年(1)

2013年(10)

2012年(74)

2011年(303)

2010年(7)

分类: LINUX

2011-06-14 21:14:33

一。内核模块的练习步骤

[root@bogon 4-1-2]# ls

hello.c Makefile

[root@bogon 4-1-2]# vi hello.c

#include

#include


MODULE_LICENSE("GPL");

MODULE_AUTHOR("feifei");

MODULE_DESCRIPTION("hello world module");


static int __init hello_init(void){

printk(KERN_ERR "hello world");

return 0;

}


static void __exit hello_exit(void){

printk(KERN_EMERG "hello exit!");

}




module_init(hello_init);

module_exit(hello_exit);

~

~

[root@bogon 4-1-2]# vi Makefile

ifneq ($(KERNELRELEASE),)


obj-m :=hello.o


else

KDIR :=/lib/modules/2.6.29/build


all:

make -C $(KDIR) M=$(PWD) modules


clean:

rm -f *.ko *.o *.mod.o *.mod.c *.symvers

endif

~


二。关于上面Makefile的解释

关于上面这个KDIR :=/lib/modules/2.6.29/build ,这个地方很容易出错,如下

[root@bogon 4-1-2]# ll /lib/modules/2.6.29/

总计 1292

lrwxrwxrwx 1 root root 32 06-13 16:06 build -> /home/guoqian/4-1-1/linux-2.6.29

drwxr-xr-x 9 root root 4096 06-13 16:07 kernel

-rw-r--r-- 1 root root 296703 06-13 16:08 modules.alias

-rw-r--r-- 1 root root 69 06-13 16:08 modules.ccwmap

-rw-r--r-- 1 root root 156855 06-13 16:08 modules.dep

-rw-r--r-- 1 root root 147 06-13 16:08 modules.ieee1394map

-rw-r--r-- 1 root root 218 06-13 16:08 modules.inputmap

-rw-r--r-- 1 root root 2545 06-13 16:08 modules.isapnpmap

-rw-r--r-- 1 root root 74 06-13 16:08 modules.ofmap

-rw-r--r-- 1 root root 37634 06-13 16:06 modules.order

-rw-r--r-- 1 root root 192564 06-13 16:08 modules.pcimap

-rw-r--r-- 1 root root 631 06-13 16:08 modules.seriomap

-rw-r--r-- 1 root root 115066 06-13 16:08 modules.symbols

-rw-r--r-- 1 root root 457214 06-13 16:08 modules.usbmap

lrwxrwxrwx 1 root root 32 06-13 16:06 source -> /home/guoqian/4-1-1/linux-2.6.29

[root@bogon 4-1-2]# ls /lib/modules/2.6.29/build/

arch drivers Kbuild Module.markers scripts vmlinux

block firmware kernel Module.symvers security vmlinux.o

COPYING fs lib net sound

CREDITS include MAINTAINERS README System.map

crypto init Makefile REPORTING-BUGS usr

Documentation ipc mm samples virt


看到了,上面的那个build是一个符号连接,并且连接里面有内容,可是同样的,你可以看看系统自带的:

[root@bogon 4-1-2]# ll /lib/modules/2.6.18-194.32.1.el5/

总计 1356

lrwxrwxrwx 1 root root 49 03-10 23:32 build -> ../../../usr/src/kernels/2.6.18-194.32.1.el5-i686

drwxr-xr-x 2 root root 4096 01-06 07:32 extra

drwxr-xr-x 9 root root 4096 03-10 23:32 kernel

drwxr-xr-x 2 root root 4096 03-15 14:15 misc

-rw-r--r-- 1 root root 290817 03-15 14:16 modules.alias

-rw-r--r-- 1 root root 69 03-15 14:16 modules.ccwmap

-rw-r--r-- 1 root root 238967 03-15 14:16 modules.dep

-rw-r--r-- 1 root root 147 03-15 14:16 modules.ieee1394map

-rw-r--r-- 1 root root 375 03-15 14:16 modules.inputmap

-rw-r--r-- 1 root root 2314 03-15 14:16 modules.isapnpmap

-rw-r--r-- 1 root root 74 03-15 14:16 modules.ofmap

-rw-r--r-- 1 root root 221138 03-15 14:16 modules.pcimap

-rw-r--r-- 1 root root 589 03-15 14:16 modules.seriomap

-rw-r--r-- 1 root root 141915 03-15 14:16 modules.symbols

-rw-r--r-- 1 root root 393321 03-15 14:16 modules.usbmap

lrwxrwxrwx 1 root root 5 03-10 23:32 source -> build

drwxr-xr-x 2 root root 4096 01-06 07:32 updates

drwxr-xr-x 2 root root 4096 01-06 07:32 weak-updates

[root@bogon 4-1-2]# ls /lib/modules/2.6.18-194.32.1.el5/build

/lib/modules/2.6.18-194.32.1.el5/build


对比一下上面的2行红色的内容,你会发现不一样,原因是一个有源码,而第二个没哟源码的。。。。所以说,在编译内核模块的华,一定要有内核源码的哦,呵呵。。。。



三。加载模块

[root@bogon 4-1-2]# ls

hello.c hello.mod.c hello.o Module.markers Module.symvers

hello.ko hello.mod.o Makefile modules.order

[root@bogon 4-1-2]# insmod hello.ko

insmod: error inserting 'hello.ko': -1 Invalid module format

出现了问题,在网上查了一下,是内核模块不匹配的问题,好,我电脑上安装了对应的内核版本,呵呵,reboot一下,然后你看下面这幅图,我选择了自己编译的2.6.29(关于怎么编译自己的内核然后是系统升级,请参照我前一博文)的内核版本,呵呵

在这里我选择第三个,后面再加载和卸载就没有问题了,呵呵

四。关于printk中出现的问题,就是里面的参数(1-7)不同导致的现象不一样,我也没法解释,贴图如下:

主要说的是上面在exit函数中使用的参数第一次是0,就出现了下面卸载rmmod时候出现的问题:如下

而我改为上面的3是就没有问题了,如下:呵呵

 



阅读(1753) | 评论(0) | 转发(0) |
0

上一篇:linux printk解释

下一篇:samba 配置过程

给主人留下些什么吧!~~