__init 和 __exit 修饰符

来源:互联网 发布:淘宝网鲜花图片素材 编辑:程序博客网 时间:2024/06/02 05:32
static int __init initialization_function(void)
{
/* Initialization code here */

}

在内核模块中经常会看见这样的函数定义,声明中的__init标志看起来有点怪;它是一个给内核的暗示,

给定的函数只是在初始化使用。模块加载者在模块加载后会丢掉这个初始化函数,给它的内存可做其他用途。

一个类似的标签 (__initdata) 给只在初始化时用的数据. 使用 __init 和__initdata 是可选的, 但是它带来的麻烦

是值得的. 只是要确认不要用在那些在初始化完成后还使用的函数(或者数据结构)上.


static void __exit cleanup_function(void)
{
/* Cleanup code here */
}

__exit 修饰符标识这个代码是只用于模块卸载( 通过使编译器把它放在特殊的 ELF 段). 

如果你的模块直接建立在内核里, 或者如果你的内核配置成不允许模块卸载, 标识为 

__exit 的函数被简单地丢弃. 因为这个原因, 一个标识 __exit 的函数只在模块卸载
或者系统停止时调用; 任何别的使用是错的.


原创粉丝点击