您的位置:首页 > 理论基础 > 数据结构算法

Linux 字符设备驱动中的数据结构

2010-11-24 22:40 337 查看
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。
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: