第四章 linux内核模块
1.linux内核模块的优点
1)模块可以不用编译linux内核,在开发调试的时候,通过动态加载命令加载进内核就可以运行,大大提升了开发调试效率,同时也控制了linux内核的大小
2)模块一旦被加载,它就和linux内核其他的部分一样,直接运行。
2.linux内核模块基本结构
linux内核包含主要的几个基本功能函数和声明函数,具体如下:
module_init()是模块的初始化(即加载)接口声明函数,通过传入自己编写的设备初始化接口,对模块进行初始化。
module_exit()是模块的退出(即卸载)函数声明函数,通过传入自己编写的设备退出接口,退出模块。
module_param()是模块参数声明函数,对模块的运行需要的参数进行声明。
MODULE_AUTHOR()是模块作者声明函数,传入字符串声明模块的编写者是谁
MODULE_LICENSE()模块许可声明函数,声明描述内核模块的许可权限,如果不声明,模块被加载的时候会被内核报内核污染错误。可接受的内核许可权限有:“GPL”,“GPL v2”,“GPL and additional rights”,“Dual BSD/GPL”,“Dual MPL/GPL”,“Proprietary”.
MODULE_DESCRIPTION()是模块功能描述函数,传入描述模块功能的字符串
MODULE_VERSION()是模块版本设置函数
3.模块编程实例
下面这个模块是传入两个参数的模块,里面是对两个参数进行打印,具体代码实现如下:
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static char *book_name =