struct cdev: 定义于 linux/include/linux/cdev.h 中,原型如下 struct cdev { struct kobject kobj; struct module *owner; //所属模块 const struct file_operations *ops; //针对该设备的操作函数集,编写驱动的主要类容就是完成这些函数 struct list_head list; dev_t dev; //设备号,一个32位的无符号整数,分为主设备号和从设备号 unsigned int count; }; linux-2.6.22/include/linux/types.h typedef __u32 __kernel_dev_t; typedef __kernel_dev_t dev_t; kobject 的数据结构定义于linux/kobject.h struct kobject { const char * k_name;//指向kobject名称的起始位置 //如果名称长度小于KOBJ_NAME_LEN(20)字节,则kobject的名称便存放到name数组中,k_name指向数组头,如果大于,则动态分配一个足够大的缓冲区来存放kobject的名称,这是k_name指向缓冲区。 char name[KOBJ_NAME_LEN]; struct kref kref;/*引用计数*/ struct list_head entry;/*在所挂到链表的连接体*/ struct kobject * parent; //指向kobject的父对象,以此来在内核中构造一个对象层次结构,并且可以将多个对象之间的关系表现初来,这就是sysfs的真相:一个用户空间的文件系统,用来表示内核中kobject对象的层次结构。 struct kset * kset; /*指向所属的kset*/ struct kobj_type * ktype; struct dentry * dentry;/*目录项*/ //指向dentry结构体,在sysfs中该结构体就表示这个kobject。 };