歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> Linux文化

詳細介紹 Linux 2.6 設備的驅動模型


1.背景

隨著設備拓撲結構越來越復雜,需要為內核建立一個統一的設備模型,對系統結構做一般性的抽象描述。

有了該抽象結構,可支持多種不同的任務:

a) 電源管理 完成電源管理工作需要對系統結構的理解,且有嚴格的順序,如:一個USB宿主適配器,在處理完所有與其相連接的設備面前是不能關閉的;

b) 與用戶空間通信 由/sysfs虛擬文件系統展示設備的屬性

c) 熱插拔設備

d) 對象生命周期

2.sysfs 虛擬文件系統

sysfs 是一個特殊的文件系統,類似於/proc。sysfs不僅象/proc一樣允許用戶空間訪問內核的數據,而且它以更結構化的方式向用戶提供內核數據信息。

sysfs的一個目的就是展示設備驅動模型中各組件的層次關系。其頂級目錄包括:

bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"> a) block b) device c) bus d) drivers e) class f) power g) firmware

每個目錄代表一個kobject對象,每個文件代表kobject的屬性。

3. Kobject、Kset 和 subsystem

3.1 Kobject

Kobject 是組成設備模型的基本結構。類似於C++中的基類,它嵌入於更大的對象的對象中--所謂的容器--用來描述設備模型的組件。如bus, devices, drivers 都是典型的容器。

容器有了kobject之後,允許內核:

a) 保存對容器的引用計數

b) 保存容器之間的層次關系

c) 為每個容器的屬性提供一個用戶視圖

bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"> struct kobject{ char * k_name; char name[20]; struct k_ref kref; struct list_head entry; struct kobject * parent; struct kset * kset; struct ktype * ktype; struct dentry * dentry; }; struct kobj_type{ void (*release) (struct kobject *); struct sysfs_ops *sysfs_ops; struct attribute **default_attrs; };

3.2 Kset

一個kset是嵌入相同類型結構的kobject集合。

bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"> struct kset{ struct subsystem * subsys; struct kobj_type ktype; struct list_head list; struct kobject kobj; struct kset_hotplug_ops * hotplug_ops; };

3.3 Subsystem

一系列的kset就組成了subsystem. subsystem可以包括不同類型的kset, 它只有兩個成員

bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"> struct subsystem{ struct kset kset; struct rw_semaphore rwsem; };

4.設備驅動模型的組件

4.1 device

4.2 drive

4.3 bus

4.4 class

Copyright © Linux教程網 All Rights Reserved