官术网_书友最值得收藏!

第2章

Linux驅動模型

2.1 概述

Linux核心開發團隊在2.5內核的開發過程中,引入了Linux驅動模型(Linux Driver Model),有時也被稱作Linux設備模型(Linux Device Model),主要目的是解決之前版本存在的以下問題。

? 沒有一種統一的機制表達驅動和設備之間的關系。

? 沒有通用的熱插拔機制。

? 沒有通用的電源管理機制。

? procfs文件系統過度混亂,包含了許多不是進程的信息。

Linux驅動模型的示意如圖2-1所示。

圖2-1 Linux驅動模型

Linux內核基于kobject內核對象機制將系統中的總線類型、設備和驅動分別用bus_type、device和device_driver等對象描述,并將其組織成一個層次結構的系統,統一管理各種類別(class)的設備及其接口(class_interface),同時借助sysfs文件系統將內核所見設備系統展示給用戶空間,提供了一個完全層次結構的用戶視圖。

Linux驅動模型的核心內容可以綜合如下。

? 以內核對象為基礎。內核對象用kobject結構表示,相當于其他對象的基類,是建構Linux驅動模型的關鍵。具有相同類型的內核對象構成內核對象集,用kset結構表示,內核對象集也包含自己的內核對象,從而組織成層次化的結構。

? 用sysfs文件系統導出到用戶空間。內核中的所有內核對象組織成樹狀,以對象屬性為葉子。通過sysfs文件系統,將用戶空間對文件的讀/寫操作轉化為對內核對象屬性的顯示和保存方法。從而導出內核對象信息,并提供配置接口。

? 將Linux子系統表達為總線類型/驅動/設備/類/接口的關系,分別用bus_type、device、device_driver、class和class_interface結構表示。每個子系統有自己的總線類型,它有一條驅動鏈表和一條設備鏈表,用來鏈接已加載的驅動和已發現的設備,驅動加載和設備發現的順序可以是任意的。每個設備可以被綁定到最多一個驅動,被綁定了驅動的設備可以正常工作。除此以外,每個設備可以屬于某個唯一的類,在類上包含多個接口,接口的方法被作用于設備,不管是先添加接口,還是先發現設備。

主站蜘蛛池模板: 安乡县| 阿合奇县| 福清市| 和田县| 东乌珠穆沁旗| 廊坊市| 龙江县| 吴江市| 高阳县| 乐陵市| 山西省| 平谷区| 高唐县| 阳东县| 当雄县| 澄迈县| 台州市| 威信县| 清徐县| 玉屏| 澎湖县| 申扎县| 桦南县| 梁山县| 辉南县| 德保县| 北碚区| 昔阳县| 镇沅| 谢通门县| 瑞昌市| 静海县| 吉林市| 天台县| 青浦区| 青阳县| 虞城县| 泰和县| 裕民县| 通江县| 合江县|