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

第2章

Linux驅(qū)動(dòng)模型

2.1 概述

Linux核心開(kāi)發(fā)團(tuán)隊(duì)在2.5內(nèi)核的開(kāi)發(fā)過(guò)程中,引入了Linux驅(qū)動(dòng)模型(Linux Driver Model),有時(shí)也被稱(chēng)作Linux設(shè)備模型(Linux Device Model),主要目的是解決之前版本存在的以下問(wèn)題。

? 沒(méi)有一種統(tǒng)一的機(jī)制表達(dá)驅(qū)動(dòng)和設(shè)備之間的關(guān)系。

? 沒(méi)有通用的熱插拔機(jī)制。

? 沒(méi)有通用的電源管理機(jī)制。

? procfs文件系統(tǒng)過(guò)度混亂,包含了許多不是進(jìn)程的信息。

Linux驅(qū)動(dòng)模型的示意如圖2-1所示。

圖2-1 Linux驅(qū)動(dòng)模型

Linux內(nèi)核基于kobject內(nèi)核對(duì)象機(jī)制將系統(tǒng)中的總線(xiàn)類(lèi)型、設(shè)備和驅(qū)動(dòng)分別用bus_type、device和device_driver等對(duì)象描述,并將其組織成一個(gè)層次結(jié)構(gòu)的系統(tǒng),統(tǒng)一管理各種類(lèi)別(class)的設(shè)備及其接口(class_interface),同時(shí)借助sysfs文件系統(tǒng)將內(nèi)核所見(jiàn)設(shè)備系統(tǒng)展示給用戶(hù)空間,提供了一個(gè)完全層次結(jié)構(gòu)的用戶(hù)視圖。

Linux驅(qū)動(dòng)模型的核心內(nèi)容可以綜合如下。

? 以?xún)?nèi)核對(duì)象為基礎(chǔ)。內(nèi)核對(duì)象用kobject結(jié)構(gòu)表示,相當(dāng)于其他對(duì)象的基類(lèi),是建構(gòu)Linux驅(qū)動(dòng)模型的關(guān)鍵。具有相同類(lèi)型的內(nèi)核對(duì)象構(gòu)成內(nèi)核對(duì)象集,用kset結(jié)構(gòu)表示,內(nèi)核對(duì)象集也包含自己的內(nèi)核對(duì)象,從而組織成層次化的結(jié)構(gòu)。

? 用sysfs文件系統(tǒng)導(dǎo)出到用戶(hù)空間。內(nèi)核中的所有內(nèi)核對(duì)象組織成樹(shù)狀,以對(duì)象屬性為葉子。通過(guò)sysfs文件系統(tǒng),將用戶(hù)空間對(duì)文件的讀/寫(xiě)操作轉(zhuǎn)化為對(duì)內(nèi)核對(duì)象屬性的顯示和保存方法。從而導(dǎo)出內(nèi)核對(duì)象信息,并提供配置接口。

? 將Linux子系統(tǒng)表達(dá)為總線(xiàn)類(lèi)型/驅(qū)動(dòng)/設(shè)備/類(lèi)/接口的關(guān)系,分別用bus_type、device、device_driver、class和class_interface結(jié)構(gòu)表示。每個(gè)子系統(tǒng)有自己的總線(xiàn)類(lèi)型,它有一條驅(qū)動(dòng)鏈表和一條設(shè)備鏈表,用來(lái)鏈接已加載的驅(qū)動(dòng)和已發(fā)現(xiàn)的設(shè)備,驅(qū)動(dòng)加載和設(shè)備發(fā)現(xiàn)的順序可以是任意的。每個(gè)設(shè)備可以被綁定到最多一個(gè)驅(qū)動(dòng),被綁定了驅(qū)動(dòng)的設(shè)備可以正常工作。除此以外,每個(gè)設(shè)備可以屬于某個(gè)唯一的類(lèi),在類(lèi)上包含多個(gè)接口,接口的方法被作用于設(shè)備,不管是先添加接口,還是先發(fā)現(xiàn)設(shè)備。

主站蜘蛛池模板: 若尔盖县| 开原市| 镇平县| 西吉县| 崇信县| 高邮市| 泌阳县| 巩义市| 鲁甸县| 稻城县| 郎溪县| 榕江县| 特克斯县| 芷江| 漠河县| 钦州市| 长垣县| 饶平县| 大城县| 含山县| 盐山县| 和静县| 朔州市| 西乌珠穆沁旗| 五指山市| 巴彦淖尔市| 徐闻县| 谷城县| 汉阴县| 嵊州市| 平凉市| 墨脱县| 桃园市| 屯门区| 新田县| 徐水县| 许昌县| 富宁县| 从化市| 太康县| 嘉兴市|