LINUX驱动模块示例讲解
驱动模块示例代码:
https://gitee.com/yuewguo/linux_module_example.git
最简单的内核模块由1个c源文件和1个Makefile文件组成。
一、C源文件内容
1 #include <linux/init.h>
2 #include <linux/module.h>
3
4 MODULE_LICENSE("GPL");
5
6 static int UF_init(void)
7 {
8 printk(KERN_EMERG"install urlfilter succ!
"); //与用户态的printf功能类似
9 return 0;
10 }
11
12 static void UF_exit(void)
13 {
14 printk(KERN_EMERG"uninstall urlfilter succ!
");
15 return ;
16 }
17
18 module_init(UF_init); // 指定模块被装载到内核时的调用函数
19 module_exit(UF_exit); // 指定模块被从内核移除时的调用函数
二、Makefile内容
1 ifneq ($(KERNELRELEASE),)
2 obj-m :=xxx.o
3 xxx-objs = yyy.o zzz.o
4 else
5 KDIR ?= /lib/modules/$(shell uname -r)/build
6 PWD := $(shell pwd)
7
8 all:
9 make -C $(KDIR) M=$(PWD) modules
10 endif
解释如下:
Makefile被执行两次。
第一次由make命令触发,因为KERNELRELEASE未被设置,绿色部分被执行。
-C选项指定内核源代码目录,M=选项指定在构造modules之前返回到模块源代码目录
第二次由“M=”选项触发,因为KERNELRELEASE此时已被设置,紫色部分被执行。
obj-m指定模块名称,比如上文指定的模块名称为 xxx.ko
xxx-objs指定构建该模块需要哪些目标文件
三、编译、安装、卸载
编译 make
安装模块 insmod xxx.ko
卸载模块 rmmod xxx
以上是 LINUX驱动模块示例讲解 的全部内容, 来源链接: utcz.com/z/517039.html