【嵌入式Linux驱动开发】二、模块
2019-07-12 22:26发布
生成海报
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); ---声明模块的别名
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮