drive

驱动

一、驱动

1.驱动的概念

#### 字符设备驱动、块设备驱动、网络设备驱动

2.驱动的三要素:加载函数、卸载函数、许可证声明

3.对上面的三要素的讲解

1)加载函数:(当使用insmod将驱动插入到Linux内核时,自动执行该函数接口)

1
2
3
4
5
6
7
8
9
缺省方式:int init_module(void){
//初始化代码(子函数)
return 0;
}
用户自定义:
int test_init(void){
//初始化函数
}
module_init(test_init);

解析:驱动加载到内核:

​ 方法1.a/直接编译成.ko文件b/内核编译

​ 方法2.a/insmod将驱动加载到内核,驱动被激活驱动自动执行加载的函数 接口。

2)卸载函数:(当使用rmmod将驱动从 Linux内核移除时,自动执行该函数接口)

1
2
3
4
5
6
7
8
缺省函数:void cleanup_module(void){
//资源释放
}
用户自定义:
void test_exit(void){
//释放资源的代码
}
module_exit(test_exit);

解析:驱动被从内核中删除的时候,由驱动生成的代码也会被删除,释放内核的资源

3)许可证声明:(开放源代码)

1
MODULE_LICENSE(“GPL”);

驱动不会自动去激活系统的软件。


重要命令的使用:

1
2
3
4
printk 是内核格式化输出函数(打印函数)
dmesg 查看内存打印缓冲区
dmesg -c 先查看,后刷新缓冲区
dmesg -C 直接刷新缓冲区