1 内核模块概述
---------------------------
|内核模块与应用程序的区别。|
---------------------------
内核模块的初始化函数的任务是为以后调用模块的函数做准备。
内核模块的退出函数就在模块被卸载时被调用。并且模块的退出函数必须小心恢复每个由初始化函数建立的东西,
否则会保留一些垃圾直到系统重新启动。
一个模块在内核空间运行。而应用程序在用户空间运行。
-------------
|内核的并发 |
-------------
内核模块运行运行在较复杂的环境下。
每一个例子驱动都要在考虑并发的情况下编写。
--------------
| 几个别的细节|
--------------
内核有一个非常小的堆栈,所以声明一个大的自动变量在内核编程中从来就不是一个good idea.
2 建立和运行模块。
----------------------
|初始化函数 |
----------------------
static init __init intitialization_funciotn(void)
{
/* 初始化代码*/
}
module_init(initalization_function);
初始化函数应当声明成静态的。
__init 标志是给内核的一个暗示, 给定的函数只是在初始化使用, 模块在初始化后会过河拆桥丢掉此函数。
------------------
| 清理函数 |
------------------
static void __exit cleanup_functin(void)
{
/*清理函数代码*/
}
module_exit(cleanup_function);
void __exit 修饰符标识这个代码只用于模块卸载。
如果你的模块直接建立在内核里(该模块一直运行),标识为__exit的函数被简单丢弃。