1.包含头文件
#include<linux/init.h>
#include<linux/module.h>
2.驱动模块的出口和入口
module_inti();
module_exit();
3.实现功能
static int __init hello_init(void)
{
printk(KERN_INFO "Enter: %s\n",__func__);
return 0;
}
static void __exit hello_exit(void)
{
printk(KERN_INFO "Enter: %s\n",__func__);
}
4.声明作者、许可证
MODULE_AUTHOR("JAY@zhen");
MODULE_LICENSE("GPL");
5.编译
Makefile代码
obj-m :=hello.o
KDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KDIR) M=$(PWD) modules
clean:
`rm -rf *.o *~ .depend.*
hello.o是中间文件,obj-m
表示把文件hello.o作为"模块"进行编译,不会编译到内核,但是会生成一个独立的 “hello.ko” 文件。KDIR
表示内核路径,PWD
表示当前路径,shell pwd
获取当前路径
命令行输入make编译
驱动编译完成以后扩展名为.ko,有两种命令可以加载驱动模块: insmod
和 modprobe
,insmod是最简单的模块加载命令,此命令用于加载指定的.ko 模块,然后加载hello.ko
sudo insmod hello.ko
查看内核log
dmesg
尾行出现字样
Enter: hello_init
驱动模块的卸载使用命令rmmod
即可
sudo rmmod hello.ko
尾行出现字样
Enter: hello_init
Enter: hello_exit