第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結構表示。每個子系統有自己的總線類型,它有一條驅動鏈表和一條設備鏈表,用來鏈接已加載的驅動和已發現的設備,驅動加載和設備發現的順序可以是任意的。每個設備可以被綁定到最多一個驅動,被綁定了驅動的設備可以正常工作。除此以外,每個設備可以屬于某個唯一的類,在類上包含多個接口,接口的方法被作用于設備,不管是先添加接口,還是先發現設備。