【嵌入式Linux驱动开发】二、模块

1. 内核模块的程序结构

1)module_init() ——模块加载函数(必须)

  • 通过insmod或modprobe命令加载内核模块时,模块的加载函数会自动被内核执行,完成模块的相关初始化工作

2)module_exit() ——模块卸载函数(必须)

  • 当通过rmmod命令卸载某模块时,模块的卸载函数会自动被内核执行,完成与模块装载函数相反的功能

3)MODULE_LICENSE() ——模块许可证声明(必须)

4)module_param() ——模块参数(可选)

  • 模块参数是模块被加载的时候可以被传递给它的值,它本身对应模块内部的全局变量
  • 用法:module_param(参数名,参数类型,参数读/写权限);

5)EXPORT_SYMBOL() ——导出模块符号(可选)

  • 内核模块可以导出符号(函数名或变量名)到内核
  • 其它模块可以使用本模块中的变量或函数

2. 模块加载函数

static int __int initialization_function(void)
{
        /*初始化代码*/
}
module_init(initialization_function);

第1行的static声明函数为静态的,只能在此文件可见。

__init表明该函数只是在初始化时使用。模块加载器在模块加载后会丢掉这个初始化函数,这样可将该函数占用的内存释放出来,以作它用。

第5行是用来注册初始化函数。

3. 模块卸载函数

static void __exit cleanup_function(void)
{
        /*释放资源代码*/
}
module_exit(cleanup_function);

第1行的__exit表示该函数只用于模块卸载或系统停止时调用,其他时候调用都是错误。

第5行是用来注册清理函数。

4. 内核支持的模块参数类型有(以u开头的为无符号值)

byte、short、ushort、int、uint、long、ulong、charp(字符指针)、bool

5. 模块声明与描述

  • MODULE_AUTHOR(author);  ---声明模块的作者
  • MODULE_DESCRIPTION(description);  ---声明模块的描述
  • MODULE_VERSION(version_string);  ---声明模块的版本
  • MODULE_ALIAS(alternate_name);  ---声明模块的别名


你可能感兴趣的:(模块)