1.linux内核模块的程序结构
1.模块加载函数(必须)
2.模块卸载函数(必须)
3.模块许可证声明(必须)
4.模块参数(可选)
5.模块导出符号(可选)
6.模块作者等信息声明(可选)
#include <linux/init.h>
#include <linux/modules.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk(KERN_ALERT "Hello World Enter!/n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Hello World Exit!/n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_AUTHOR("XXXXXXX");
MODULE_DESCRIPTION("A Simple Hello World Module");
MODULE_ALIAS("a simplest module");
2.模块加载函数
linux内核模块函数一般以__init标示声明
模块加载函数必须以“module__init(函数名)”
调用:request_module(模块名)
3.模块卸载函数
以__exit标示声明
4.模块参数
用“module_param(参数名,参数类型,参数读写权限)”为模块定义一个参数
用“module_param_array(数组名,数组类型,数组长,参数读写权限)”定义一组参数
5.导出符号
EXPORT_SYMBOL(符号名)
EXPORT_SYMBOL_GPL(符号名)
导出的符号可以作为其他模块使用
6.模块的使用计数
try_module_get(&module)
module_put(&module)
7.模块的编译
步骤:
先进入linux的内核所在的目录,并编译出 .O文件 运行MODPOST会生成临时的.MOD.C文件 然后根据此文件编译出.MOD.O之后连接.O文件得到模块文件.KO