Linux驱动模块基础
来源:互联网 发布:c网络应用编程 第3版 编辑:程序博客网 时间:2024/05/16 07:35
1、模块加载函数
Linux内核模块加载函数一般以__init标识声明,典型的模块加载函数的形式如下:
static int __init initialization_function(void)
{
/*初始化代码*/
}
module_init(initialization_function);
模块加载函数必须以“module_init(函数名)”的形式被指定。它返回整型值,若初始化成功,应返回0。而在初始化失败时,应该返回错误编码。
2、模块卸载函数
Linux内核模块卸载函数一般以__exit标识声明,典型的模块卸载函数的形式如下:
static void __exit cleanup_function(void)
{
/*初始化代码*/
}
module_exit(cleanup_function);
模块卸载函数在模块卸载的时候执行,不返回任何值,必须以“module_exit(函数名)”的形式来指定。
通常来说,模块卸载函数要完成与模块加载函数相反的功能,如下:
a、如模块加载函数注册了XXX,则模块卸载函数应该注销XXX;
b、若模块加载函数动态申请了内存,则模块卸载函数应该释放改内存;
c、若模块加载函数申请了硬件资源(中断、DMA通道、IO端口和IO内存等)的占用,则模块卸载函数应释放这些硬件资源。
d、若模块加载函数开启了硬件,则卸载函数中一般要关闭硬件。
__init 和 __exit都是宏,其定义分别如下:
#define __init __attribute__ ((__section__(".init.text")))
#define __exit __attribute__ ((__section__(".exit.text")))
3、模块参数
可以用“module_param(参数名,参数类型,参数读/写权限)”为模块定义一个参数,例如下列代码定义了一个整型参数和一个字符指针参数。
static char * book_name = "1232412";
static int num = 12323;
module_param(num ,int , S_IRUGO);
module_param(book_name , charp , S_IRUGO);
在装载内核模块时,用户可以向模块传递参数,形式为“insmode (或modprobe) 模块名 参数名 = 参数值”,如果不传递,参数将使用模块内定义的默认值。
4、模块声明与描述
在Linux内核模块中,我们可以用MODULE_AUTHOR、MODULE_DESCRIPTION、MODULE_VERSION、MODULE_DEVICE_TABLE、MODULE_ALISA分别声明模块的作者,描述,版本,设备表和别名,例如:
ODULE_AUTHOR(author);
MODULE_DESCRIPTION(description);
MODULE_VERSION(version_string);
MODULE_DEVICE_TABLE(table_info);
MODULE_ALISA(alternate_name);
- Linux驱动模块基础
- Linux驱动基础 内核模块
- Linux内核模块/驱动编程基础
- Linux内核模块/驱动编程基础
- Linux设备驱动开发基础---Linux内核模块
- Linux驱动开发①--Linux基础及hello模块
- [linux]linux驱动模块
- 《Linux驱动基础篇》- Makefile和模块解析
- linux驱动基础开发2——linux 驱动开发前奏(模块编程)
- linux驱动基础开发2——linux 驱动开发前奏(模块编程)
- linux驱动基础开发2——linux 驱动开发前奏(模块编程)
- linux设备驱动学习(二):Linux驱动模块的相关基础和hello world
- linux驱动基础开发2——linux 驱动开发前奏(模块编程)-转
- linux驱动基础开发2——linux 驱动开发前奏(模块编程)
- Linux驱动基础开发 Linux 驱动开发前奏(模块编程)
- Linux内核驱动模块
- Linux内核驱动模块
- linux 驱动模块编译
- 文件下载
- 最近接手了一个烂项目
- 如何使用inotify_init,inotify_add_watch,inotify_rm_watch,read编写监控程序
- JDK中还藏着一个宝贝 它的名字叫做VisualVM
- linux下从安装JDK到安装ssh到hadoop单机伪分布式部署
- Linux驱动模块基础
- fedora使用pidgin登录microsoft office communicator
- WEB服务器---环境的搭建
- FTP验证慢的问题分析
- UNIX中select的实现和以及字节数组来实现位操作
- TIME_WAIT的一些知识
- CentOS 安装JDK
- 学习jQuery第一天:演示jQuery层次选择器
- ubuntu中设置samba共享