Linux内核模块编程入门-3(__init和__exit宏)

来源:互联网 发布:c语言从入门到精通好吗 编辑:程序博客网 时间:2024/06/04 20:09

在内核2.2及以后的版本中,注意到init和cleanup函数的定义的变化,一旦init函数完成了内置的驱动,__init宏让init函数丢弃,同时释放内存,对于可加载的模块不适用。


__initdata的原理类似与__init,只是__initdata由于init变量而不是函数。


当模块从kernel中卸载时,__exit宏让函数删除。类似于__exit,对于可加载模块没有效果。


这些宏定义在/linux/init.h,用来释放内核内存,当启动内核时,看有类似“Freeing unused kernel memory:236k freed”的输出,表示内核正在释放内存。


如下示例:

/* * hello-3.c - Illustrating the __init, __initdata and __exit macros */#include <linux/module.h>// Needed by all modules#include <linux/kernel.h>// Needed for KERN_INFO#include <linux/init.h>// Needed for the macrosstatic int hello_3_data __initdata = 3;static int __init hello_3_init(void){printk(KERN_INFO "Hello, World %d\n", hello_3_data);return 0;}static void __exit hello_3_exit(void){printk(KERN_INFO "Goodbye, world 3\n");}module_init(hello_3_init);module_exit(hello_3_exit);


原创粉丝点击