static int __init initialization_function(void)
{
/* Initialization code here */
{
/* Initialization code here */
}
在内核模块中经常会看见这样的函数定义,声明中的__init标志看起来有点怪;它是一个给内核的暗示,
给定的函数只是在初始化使用。模块加载者在模块加载后会丢掉这个初始化函数,给它的内存可做其他用途。
一个类似的标签 (__initdata) 给只在初始化时用的数据. 使用 __init 和__initdata 是可选的, 但是它带来的麻烦
是值得的. 只是要确认不要用在那些在初始化完成后还使用的函数(或者数据结构)上.
static void __exit cleanup_function(void)
{
/* Cleanup code here */
}
__exit 修饰符标识这个代码是只用于模块卸载( 通过使编译器把它放在特殊的 ELF 段).
如果你的模块直接建立在内核里, 或者如果你的内核配置成不允许模块卸载, 标识为
__exit 的函数被简单地丢弃. 因为这个原因, 一个标识 __exit 的函数只在模块卸载
或者系统停止时调用; 任何别的使用是错的.