本文将简要分析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,但是在某些情况下,会有多个设备号对应于一个特定的设备。例如,可以通过一个设备的多个设备号老允许用户选择对设备不同的操作模式。
到目前为止,已经介绍完了在驱动程序中如何申请设备号以及所涉及到的数据结构,下一篇文章将想大家介绍如何把这些内容联系起来组成一个字符设备驱动程序。
本文解析了cdev结构的几个关键成员,包括内嵌的kobject、指向驱动程序模块的指针、设备文件链表头及设备号范围。通过这些内容,帮助读者理解cdev在Linux设备模型中的作用。
770

被折叠的 条评论
为什么被折叠?



