前面讲了内核模块怎么安装和卸载,那么现在就正式讲解一下内核模块怎么编写。
以一个在内核中打印出”hello world”到终端的例子讲解。
1、 首先要写模块加载时的入口函数和模块卸载时的入口函数
static int hello_init()
{
printk(“<0>hello world\n”);
return 0;
}
static void hello_exit()
{
printk(“<0>exit\n”);
}
module_init(hello_init);
module_exit(hello_exit);
这几段代码就是一个模块函数代码了,其中有几个需要注意:
a) static是为了防止函数命名污染。
b) 在内核中的打印函数是printk,其中<0>表示该信息的等级,数字越小,级别越高。
c) 用module_init和module_exit宏来指定入口函数。
当在命令行安装该模块时,会自动调用hello_init这个函数,当卸载该函数时,对自动调用hello_exit函数。
2、 模块可选信息
模块有一些用来表示相关信息的宏:
MODULE_LICENSE 用来告诉内核遵循什么协议 GPL GPLv2等
MODULE_AUTHOR