Linux设备驱动-模块

【1】模块文件
在文件系统中可以被直接插入到内核的文件
Linux设备驱动-模块_第1张图片

【2】模块三要素
模块加载函数(必须)
当在文件系统中使用insmod或者该模块在内核被执行的时候,自动执行该函数
函数方式:
1)缺省方式

 int init_module(void){
	     //资源的申请,初始化代码
	     return 0;
	   }
2)用户自定义 
  int test_init(void){
	      //资源的申请,初始化代码
			return 0;
	   }
	 
       module_init(test_init);	  

模块卸载函数(必须)
当模块从文件系统中移除或者模块在内核失效的时候,自动执行该函数
函数方式:
1)缺省方式
void cleanup_module(void){
//资源的释放,执行的是与init_module相反的工作
}
2)用户自定义
void test_exit(void){
//资源的释放,执行的是与test_init相反的工作
}
module_exit(test_exit);
模块许可证声明(必须)
MODULE_LICENSE(“GPL”);

【3】调试驱动
查看打印信息: dmesg 显示内核中所有的打印信息
sudo dmesg -c 先显示打印信息,后清空缓冲区
sudo dmesg -C 不显示,直接清空缓冲区
cat /proc/modules 显示当前系统中的模块信息
lsmod 显示当前系统中的模块信息
modinfo + xxx.ko 查看模块信息

【4】模块参数
传参对象:变量(int,bool,ulong,charp),指针,数组(字符,整型)
module_param(变量名, 变量的类型, 权限);
MODULE_PARM_DESC(变量名,“声明变量的功能”);

module_param_array(数组名,数组中元素的类型,&数组中元素的个数,权限);

module_param_string(参数名, 数组名, 组数的大小, 权限);

你可能感兴趣的:(Linux设备驱动开发)