您的位置首页>企业动态>

Linux 2.6内核的设备模型

导读 大家好,我是极客范的本期栏目编辑小友,现在为大家讲解Linux 2 6内核的设备模型问题。Linux 2 6内核的设备模型Linux 2 6内核的一个

音频解说

大家好,我是极客范的本期栏目编辑小友,现在为大家讲解Linux 2.6内核的设备模型问题。

Linux 2.6内核的设备模型

Linux 2.6内核的一个重要特点是提供了统一的内核设备模型。随着技术的不断进步,系统的拓扑变得越来越复杂,对智能电源管理、热插拔的要求也越来越高。2.4内核已经无法满足这些要求。为了满足这种情况的需要,2.6内核开发了全新的设备模型。

1.sysfs文件系统

Sysfs文件系统是一种类似proc文件系统的特殊文件系统,用于将系统中的设备组织成层次结构,并向用户模式程序提供详细的内核数据结构信息。其顶级目录主要包括:

块目录:包含所有块设备。

设备目录:包含系统中的所有设备,并根据设备所连接的总线类型组织成层次结构。

总线目录:包含系统中的所有总线类型。

驱动程序目录:包括内核中所有注册的设备驱动程序。

类别目录:系统中设备的类型(如网卡设备、声卡设备等。)

2.内核对象机制的关键数据结构

2.1 kobject内核对象

koobject是Linux 2.6引入的一种新的设备管理机制,在内核中用struct kobject表示。通过这种数据结构,所有设备在底层都有统一的接口。kobject提供基本的对象管理,这是Linux 2.6设备模型的核心结构。它与sysfs文件系统密切相关,在内核中注册的每个kobject对象都对应sysfs文件系统中的一个目录。

Kobject结构定义为:

struct kobject {

char * k _ name指向设备名称的指针

字符名称[KOBJ _ NAME _ LEN];设备名称

struct kref kref对象引用计数

struct list_head条目;附属于其所在kset的装置。

struct kobject *父级;指向父对象的指针

struct kset * kset指向它所属的kset的指针

struct kobj _ type * ktype指向其对象类型描述符的指针

struct dentry * dentrysysfs文件系统中与该对象对应的文件节点的路径指针

};

的kref字段表示对象的引用计数。内核通过kref管理对象的引用计数。内核提供了两个函数,kobject _ get()和kobject _ put(),分别增加和减少引用计数。当引用计数为0时,对象使用的所有资源都将被释放。

Ktype字段是指向kobj_type结构的指针,表示对象的类型。Kobj_type数据结构包含三个域:一个release方法,用于释放Kobj对象占用的资源;sysfs_ops指针指向sysfs操作表和sysfs文件系统的默认属性列表。Sysfs操作表包括两个函数store()和show()。用户模式读取属性时,调用show()函数,将该函数编码的指定属性值存储在缓冲区中,返回用户模式;store()函数用于存储用户模式传入的属性值。

2.2 kset内核对象集合

Kobjects通常通过kset组织成层次结构,kset是相同类型的Kobjects的集合,由内核中的kset数据结构表示,定义为:

结构kset {

struct子系统* subsys指向所在子系统的指针。

struct kobj _ type * ktype指向kset对象类型描述符的指针

struct list _ head list用于连接kset中所有kobject的链接列表头

struct kobject kobj嵌入式kobject

struct kset _ hot plug _ ops * hot plug _ ops;指向热插拔操作表的指针

};

kset中包含的所有kobject都被组织成一个双向循环链表,链表字段是链表的头部。Ktype字段指向kobj_type结构,该结构由kset中的所有kobject共享,并指示这些对象的类型。Kset数据结构还嵌入了一个kobj对象(由kobj字段表示),属于这个kset的kobj对象的所有父字段都指向这个嵌入的对象。此外,kset依赖kobj来维护引用计数:kset的引用计数实际上是嵌入式kobj对象的引用计数。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。