/*module.c*/
#include<linux/init.h>
#include<linux/kernel.h>
#include<linux/module.h>
static int __init module_init(void)//注意是两个下划线
{
printk("module_init\n");
return 0;
}
static int __exit module_exit(void)//注意是两个下划线
{
printk("module_exit\n");
return;
}
module_init(module_init);
module_exit(module_exit);
MODULE_LICENSE("GPL");//模块许可---GPL
MODULE_AUTHOR("HPX");//模块作者--HPX
MODULE_DESCIPTION("A SIMPE MODULE");//模块描述---一个简单模块
MOUDLE_ALIAS("virtual-serial");//模块别名---虚拟串行接口
许可证协议有:GPL,GPL v2,GPL and additional rights,Dual BSD/GPL,Dual MIT/GPL,Dual MPL/GPL等。
模块初始化函数moudle_init会且仅只会被调用一次,在调用完成后不应该再次调用,所以该函数所占的内存应该被释放掉,在函数名前面加__init可以达到这个目的,__init是把标记的函数放到FILE文件特定代码段,在模块加载这段时间将会分单独分配内存,这些函数调用成功后,模块加载程序会释放这部分空间。__exit用于修饰清除函数,和__init的作用类似,但是用于模块的卸载,如果模块不允许卸载,那么这段代码完全就不用加载。
简单来讲:__init和__exit就是让对应的函数动态开辟空间,动态释放空间,用的时候才开辟空间,不用就不开辟,用完就释放;