标签:成员 通过 字符 命令 height file nod 避免 成员函数
.1 杂项设备驱动的引入
字符设备指那些必须以串行顺序依次进行访问,且没有经过系统快速缓冲的设备,了解了Linux内核中驱动的框架和组成,以及编写的步骤等。但是,当我们写的驱动程序多了之后,就会发现:部分硬件并不符合预先定义的字符设备的范畴,而且普通字符设备的主设备号不管是静态分配还是动态分配,都会消耗一个主设备号(目前一个系统最多只能有255个字符设备),比较浪费主设备号资源。因此,而引入了杂项设备驱动。
杂项设备是一个典型的字符设备(与接下来要介绍的输入子系统一样,呵呵),其主设备号固定为10。其内部实现就是用主设备号10来调用register_chrdev()实现的;并且在内部还调用了class_create()和device_create ()为每个杂项设备创建设备节点,从而避免了我们通过mknod命令或自行调用该两个函数来创建设备节点的麻烦。
从以上这点来说,杂项设备就是将我们平常编写字符设备的驱动进行了再次封装,降低了我们编写字符设备驱动的难度,同时节约了主设备号资源。
.3 杂项设备与字符设备实现比较
在进行字符设备驱动程序开发的过程中,我们的实现步骤如下:
申请一个字符设备号:可以自己指定,也可系统自动分配;
构造一个file_operations结构体,其包含对硬件的所有操作;
实现file_operations结构体中的成员函数;
将字符设备注册进系统中:register_chrdev();
创建设备类和设备节点:class_create()、device_create();
告诉内核入口与出口函数:module_init()、module_exit();
杂项设备驱动也是字符设备驱动,那么其注册的过程与字符设备驱动一样,也必须经过上面的这些步骤,只是杂项设备驱动中的对申请字符设备号、注册字符设备到系统、创建设备类和设备节点进行了封装,我们只需要完成如下几步开发即可:
构造一个file_operations结构体,其中包含对硬件的所有操作;
实现file_operations结构体中的成员函数;
构造一个杂项设备驱动(struct miscdevice)实体,并赋值前面定义的file_operations实体;
在入口函数处调用misc_register()向系统注册杂项设备;
在出口函数处调用misc_deregister()从系统注销杂项设备;
告诉内核入口与出口函数:module_init()、module_exit();
从中也可以得出一个结论:无论Linux内核对驱动框架设计的如何好,内核实现了多少的代码,与硬件相关部分的代码还是需要我们去实现。
标签:成员 通过 字符 命令 height file nod 避免 成员函数
原文地址:http://www.cnblogs.com/hkyst/p/7603120.html