目标:熟悉Linux模块相关函数等
1. module_init()和module_exit()
模块加载,例:
<span style="font-size:18px;">static int __init initialization_function(void)
{
/* 初始化代码 */
}
module_init(initialization_function);</span>
这里__init:
#define __init __attribute__((__section__(".init.text")))
此外,在.initcall.text还保存一份函数指针,初始化完成后,init所有区段都被释放
此外,还有 __initdata可以用来初始化数据
如:
static int hello_data __initdata = 1;
模块卸载,例:
static void __exit cleanup_function(void)
{
/* 清除代码 */
}
module_exit(cleanup_function);
这里__exit告诉内核若模块被编译进内核(非m),则cleanup_function函数被忽略
同时也有__exitdata可以修饰数据
2. module_param()
例:
static char *book_name = "dissecting Linux Device Driver";
module_param(book_name, charp, S_IRUGO);
static int book_num = 4000;
module_param(book_num, int, S_IRUGO);
形参表为:参数名, 参数类型, 读/写权限
3. EXPORT_SYMBOL()和EXPORT_SYMBOL_GPL()
用于导出符号,这样这些符号就可以被其他模块调用了
4. MODULE_AUTHOR(), MODULE_DESCRIPTION(), MODULE_VERSION(), MODULE_DEVICE_TABLE(), MODULE_ALIAS()
分别为模块的:作者、描述、版本、设备表、别名