编写一个简单的内核模块
(1)实验目的
Linux 操作系统的内核是单一体系结构(monolithic kernel)的,也就是说,整个内核是一
个单独的非常大的程序。这样,系统的速度和性能都很好,但是可扩展性和维护性就相对比
较差。为了弥补单一体系结构的这种缺陷,Linux操作系统使用了一种全新的机制-—模块
机制,用户可以根据需要,在不需要对内核重新编译的情况下,模块能动态地载入内核或从
内核移出。
本实验通过分析代码,学习Linux 是如何实现模块机制的;通过一个实例,掌握如何编
写模块程序并进一步掌握内核模块的机理。
(2)实验内容
编写一个内核模块helloworld。当用insmod命令加载模块后,会显示HelloWorld !
#include <linux/module.h>
#include <linux/init.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("weipeng jing");
MODULE_DESCRIPTION("Hello World Module");
MODULE_ALIAS("a simplest module");
static int __init hello_init()
{
printk(KERN_EMERG"Hello World!\n");
return 0;
}
static void __exit hello_exit()
{
printk("<6>hello exit\n");
printk(KERN_EMERG"good bye!\n");
}
module_init(hello_init);
module_exit(hello_exit);
Makefile规则
ifneq ($(KERNELRELEASE),)
obj-m := hello.o
else
KDIR := /lib/modules/2.6.18-53.el5xen/build
all:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers
endif
编写一个包含2.c文件的内核模块程序,进行编译,掌握多文件模块编译的方法及Makefile书写规则!
Home目录下建立test2,
建立hello.c编写上述程序
Vim Makefile,上述拷贝
Make
找到hello.ko
Insmod hello.ko 会出现hello Word