驱动分为四个部分
头文件
驱动模块的入口和出口
声明信息
功能实现
第一步,包含头文件
#include <linux/init.h> //包含宏定义的头文件 #include <linux/mudule.h> //包含初始化加载模块的头文件
第二部,驱动模块的入口和出口
module_init(hello_init);//模块入口 module_exit(hello_exit);//模块出口
第三步,声明模块拥有开源许可证
MODULE_LICENSE("GPL");
第四部,功能实现
static int hello_init(void) { printk("hello world\n"); return 0; } static int hello_exit(void) { printk("bye bye\n"); return 0; }
内核模块加载的时候打印hello world,内核模块卸载的时候打印bye bye
注意:内核打印函数不能用printf,因为内核没有办法使用C语言库
整体代码如下:
#include <linux/init.h> //包含宏定义的头文件 #include <linux/mudule.h> //包含初始化加载模块的头文件 static int hello_init(void) { printk("hello world\n"); return 0; } static int hello_exit(void) { printk("bye bye\n"); return 0; } module_init(hello_init);//模块入口 module_exit(hello_exit);//模块出口 MODULE_LICENSE("GPL");