偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.
全部博文(1748)
分类: LINUX
2010-10-15 15:23:13
#include//moudle.h 包含了大量加载模块需要的函数和符号的定义
#include//init.h 指定你的初始化和清理函数
MODULE_LICENSE("GPL");使用的代码许可证
static int __init initialization_function(void) { /* Initialization code here */ } module_init(initialization_function);
__init 标志告诉内核,这个函数知识在初始化使用,模块初始化完成后内核丢弃此函数,并会自动回收本函数的内存。
__initdata 标志给只在初始化时用的数据。
__devinit 和 __devinitdata: 在内核没有配置支持hotplug设备时转化成_init和_initdata.
返回值 err 是一个错误码. 在 Linux 内核里, 错误码是负数, 属于定义于的集合。
static void __exit cleanup_function(void) { /* Cleanup code here */ } module_exit(cleanup_function);
__exit 修饰符标识这个代码是只用于模块卸载( 编译器会把它放在特殊的 ELF 段)
模块清理函数必须撤销任何由初始化函数进行的注册, 并且惯例(但常常不是要求的)是按照注册时相反的顺序注销设施.
一个布尔型( true 或者 false)值(相关的变量应当是 int 类型). invbool 类型颠倒了值, 所以真值变成 false, 反之亦然.
一个字符串指针值.
数组参数, 用逗号间隔的列表提供的值, 模块加载者也支持. 声明一个数组参数, 使用: module_param_array(name,type,num,perm);
这里 name 是你的数组的名子(也是参数名), type 是数组元素的类型, num 是一个整型变量, perm 是通常的权限值. 如果数组参数在加载时设置, num 被设置成提供的数的个数. 模块加载者拒绝比数组能放下的多的值.