- 论坛徽章:
- 0
|
一个简单的内核模块如下:hello_mod.c
1 #include <linux/init.h>
2 #include <linux/module.h>
3
4 static int __init hello_mod_init(void)
5 {
6 printk(KERN_ALERT "\nHello, Module!\n");
7 return 0;
8 }
9
10 static void __exit hello_mod_exit(void)
11 {
12 printk(KERN_ALERT "\nBye, Module!\n");
13 }
14
15 module_init(hello_mod_init);
16 module_exit(hello_mod_exit);
17
18 MODULE_LICENSE("Dual BSD/GPL");
1-2行是编写内核模块所必须的内核头文件;
4-8行是模块初始化部分的代码,在模块被插入的时候调用
10-13行是模块退出部分的代码,在模块被卸载时调用
15-16行分别通过两个内核的宏来指定函数的功能
第18行是告诉内核模块所采用的许可证。
下面是Linux内核模块驱动的典型Makefile如下图:
1 # Makefile2.6
2 ifneq ($(KERNELRELEASE),)
3 #kbuild syntax. dependency relationshsip of files and target modules are listed here.
4 obj-m := hello_mod.o
5 else
6 PWD := $(shell pwd)
7 KVER = 2.6.27.8
8 KDIR := /home/xss/lpc3250/linux-2.6.27.8/
9 all:
10 $(MAKE) -C $(KDIR) M=$(PWD) modules
11
12 clean:
13 rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions
14 endif
第6行指定内核模块名,对于单文件模块,必须与C文件同名。
第7行指定所用的内核的版本。
第8行指定Linux内核源代码所在路径。
Makefile与内核模块文件在同一目录下,只需要在终端输入make命令即可编译得道内核模块文件(*.ko)。
编译得到内核模块以后,通过insmod命令可以将其插入到正在运行的内核中,相反,通过rmmod命令将已经插入内核的模块卸载。
前提是你Linux中要有编译好的内核源码,也就是KDIR := /home/xss/lpc3250/linux-2.6.27.8/
这个指定的地方。其他的不想说了,够详细了 |
|