本文将简要分析cdev结构剩下的几个成员:
struct kobject kobj; //内嵌的kobject
struct module *owner; //指向实现驱动程序的模块(如果有的话)
struct list_head list; //与字符设备对应的设备文件的链表头
unsigned int count; //设备对应的设备号的范围
struct kobject kobj----kobject是linux设备模型的基本结构。我们可以把它想象成Java中的Object类。cdev结构中包含kobject可以理解为cdev是kobject的一个子类。在使用kobject的时候有两点需要注意:1、在调用kobject_init初始化kobject对象之前应先将整个kobject清零,通常使用memset。2、kobject的使用者至少要为其设置名字,使用kobject_set_name。
struct module *owner----指向实现驱动程序的模块,我们通常设置为THIS_MODULE。
struct list_head list----与字符设备对应的设备文件的链表头。该链表是一个双向链表,用于收集相同字符设备驱动程序所对应的字符设备文件的索引节点。
unsigned int count----设备对应的设备号的范围,count通常取1,但是在某些情况下,会有多个设备号对应于一个特定的设备。例如,可以通过一个设备的多个设备号老允许用户选择对设备不同的操作模式。
到目前为止,已经介绍完了在驱动程序中如何申请设备号以及所涉及到的数据结构,下一篇文章将想大家介绍如何把这些内容联系起来组成一个字符设备驱动程序。