一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Linux設備模型(1)_基本概念

 風之library 2014-05-14

作者:蝸蝸 發(fā)布于:2014-2-27 17:01 

1. 前言

在“Linux內核的整體架構”中,蝸蝸有提到,由于Linux支持世界上幾乎所有的、不同功能的硬件設備(這是Linux的優(yōu)點),導致Linux內核中有一半的代碼是設備驅動,而且隨著硬件的快速升級換代,設備驅動的代碼量也在快速增長。個人意見,這種現象打破了“簡潔就是美”的理念,是丑陋的。它導致Linux內核看上去非常臃腫、雜亂、不易維護。但蝸蝸也知道,這不是Linux的錯,Linux是一個宏內核,它必須面對設備的多樣性,并實現對應的驅動。

為了降低設備多樣性帶來的Linux驅動開發(fā)的復雜度,以及設備熱拔插處理、電源管理等,Linux內核提出了設備模型(也稱作Driver Model)的概念。設備模型將硬件設備歸納、分類,然后抽象出一套標準的數據結構和接口。驅動的開發(fā),就簡化為對內核所規(guī)定的數據結構的填充和實現。

本文將會從設備模型的基本概念開始,通過分析內核相應的代碼,一步一步解析Linux設備模型的實現及使用方法。

2. Linux設備模型的基本概念

2.1 Bus, Class, Device和Device Driver的概念

下圖是嵌入式系統(tǒng)常見的硬件拓撲的一個示例:
device_toplogy

硬件拓撲描述Linux設備模型中四個重要概念中三個:Bus,Class和Device(第四個為Device Driver,后面會說)。

Bus(總線):Linux認為(可以參考include/linux/device.h中struct bus_type的注釋),總線是CPU和一個或多個設備之間信息交互的通道。而為了方便設備模型的抽象,所有的設備都應連接到總線上(無論是CPU內部總線、虛擬的總線還是“platform Bus”)。

Class(分類):在Linux設備模型中,Class的概念非常類似面向對象程序設計中的Class(類),它主要是集合具有相似功能或屬性的設備,這樣就可以抽象出一套可以在多個設備之間共用的數據結構和接口函數。因而從屬于相同Class的設備的驅動程序,就不再需要重復定義這些公共資源,直接從Class中繼承即可。

Device(設備):抽象系統(tǒng)中所有的硬件設備,描述它的名字、屬性、從屬的Bus、從屬的Class等信息。

Device Driver(驅動):Linux設備模型用Driver抽象硬件設備的驅動程序,它包含設備初始化、電源管理相關的接口實現。而Linux內核中的驅動開發(fā),基本都圍繞該抽象進行(實現所規(guī)定的接口函數)。

注:什么是Platform Bus?
在計算機中有這樣一類設備,它們通過各自的設備控制器,直接和CPU連接,CPU可以通過常規(guī)的尋址操作訪問它們(或者說訪問它們的控制器)。這種連接方式,并不屬于傳統(tǒng)意義上的總線連接。但設備模型應該具備普適性,因此Linux就虛構了一條Platform Bus,供這些設備掛靠。

2.2 設備模型的核心思想

Linux設備模型的核心思想是(通過xxx手段,實現xxx目的):

1. 用Device(struct device)和Device Driver(struct device_driver)兩個數據結構,分別從“有什么用”和“怎么用”兩個角度描述硬件設備。這樣就統(tǒng)一了編寫設備驅動的格式,使驅動開發(fā)從論述題變?yōu)樘羁阵w,從而簡化了設備驅動的開發(fā)。

2. 同樣使用Device和Device Driver兩個數據結構,實現硬件設備的即插即用(熱拔插)。
在Linux內核中,只要任何Device和Device Driver具有相同的名字,內核就會執(zhí)行Device Driver結構中的初始化函數(probe),該函數會初始化設備,使其為可用狀態(tài)。
而對大多數熱拔插設備而言,它們的Device Driver一直存在內核中。當設備沒有插入時,其Device結構不存在,因而其Driver也就不執(zhí)行初始化操作。當設備插入時,內核會創(chuàng)建一個Device結構(名稱和Driver相同),此時就會觸發(fā)Driver的執(zhí)行。這就是即插即用的概念。

3. 通過"Bus-->Device”類型的樹狀結構(見2.1章節(jié)的圖例)解決設備之間的依賴,而這種依賴在開關機、電源管理等過程中尤為重要。
試想,一個設備掛載在一條總線上,要啟動這個設備,必須先啟動它所掛載的總線。很顯然,如果系統(tǒng)中設備非常多、依賴關系非常復雜的時候,無論是內核還是驅動的開發(fā)人員,都無力維護這種關系。
而設備模型中的這種樹狀結構,可以自動處理這種依賴關系。啟動某一個設備前,內核會檢查該設備是否依賴其它設備或者總線,如果依賴,則檢查所依賴的對象是否已經啟動,如果沒有,則會先啟動它們,直到啟動該設備的條件具備為止。而驅動開發(fā)人員需要做的,就是在編寫設備驅動時,告知內核該設備的依賴關系即可。

4. 使用Class結構,在設備模型中引入面向對象的概念,這樣可以最大限度地抽象共性,減少驅動開發(fā)過程中的重復勞動,降低工作量。

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    好吊视频有精品永久免费 | 深夜日本福利在线观看| 亚洲淫片一区二区三区| 亚洲一区二区欧美激情| 日韩女优精品一区二区三区| 日韩精品视频免费观看| 色一情一伦一区二区三| 一级欧美一级欧美在线播| 国产香蕉国产精品偷在线观看| 欧美熟妇喷浆一区二区| 免费福利午夜在线观看| 国产免费观看一区二区| 91人妻丝袜一区二区三区| 午夜国产成人福利视频| 国产欧美一区二区另类精品| 日韩欧美中文字幕av| 黑鬼糟蹋少妇资源在线观看| 精品国产亚洲av久一区二区三区| 欧美日韩国产黑人一区| 九九热精彩视频在线免费| 日韩午夜福利高清在线观看| 日韩aa一区二区三区| 国产偷拍精品在线视频| 欧美午夜国产在线观看| 国产熟女一区二区三区四区| 免费啪视频免费欧美亚洲| 偷拍美女洗澡免费视频| 好吊色欧美一区二区三区顽频| 欧美一区二区三区播放| 欧美黑人在线精品极品| 国产目拍亚洲精品区一区| 草草草草在线观看视频| 欧美大黄片在线免费观看| 久久精品国产一区久久久| 午夜免费精品视频在线看| 欧美黑人在线一区二区| 国产大屁股喷水在线观看视频 | 久久香蕉综合网精品视频| 亚洲欧美日本国产不卡| 免费精品一区二区三区 | 日韩一区二区三区嘿嘿|