linux统一设备模型

346 阅读1分钟

1.什么是统一设备模型?

对成千上万的不同功能的硬件设备进行分类,抽象,形成一套标准的数据结构与接口。

2.为什么要统一设备模型?

  1. linux需要支持成千上万不同的设备,导致内核代码臃肿、不易维护,需要降低设备多样性带来的开发复杂度。
  2. 电源管理
  3. 热插拔

3.怎么实现统一设备模型?

bus总线:CPU与设备进行信息交互的通道,所有设备都应连接到总线上。

class类:集合具有相似功能或属性的设备,抽象出一套在多个设备之间共用的数据结构与接口。

Device设备:抽象系统中所有的硬件设备,描述它的名字、属性、从属的bus、从属的class。

DeviceDriver驱动:设备驱动的抽象接口,包含设备初始化、电源管理等。相同name则在register时return。

基础数据结构:

kobject:最基本的数据类型,提供引用计数、名称、父指针等信息,在sysfs中以一个目录出现,parent没有设置kset就是parent(构成树状结构)。

kobj_type:kobject的属性操作集合

kset:特殊的kobject,是一系列kobject的集合

attribute:kobject属性,在sysfs中以文件形式出现

kref:原子操作的引用计数

1644587508.png

4、attribute文件读写数据流

vfs --> sysfs --> kernfs --> kobj --> ktype --> sysfs_ops --> xxx_attribute

5、图解统一设备模型

选中以下图片,右键图片另存为,会更清晰。

图片看不清的话可以看源文件:github.com/antsHub/lin…

统一设备模型.png