免費谘詢熱(rè)線(xiàn)
13621929115一,前言在“Linux內核的整體架構”中,有提到,由於Linux支持世界上幾乎所有的、不同功能的硬件(jiàn)設備(這是Linux的優點),導致Linux內核中有一半的(de)代碼是設備驅動,而且(qiě)隨著硬件的快速(sù)升級換代,設備驅動的代碼量也在快速增(zēng)長。
個人意見,這種現(xiàn)象打破(pò)了“簡(jiǎn)潔就是美(měi)”的理(lǐ)念,是醜陋(lòu)的它導致Linu工廠設(shè)備沙盤x內核看上(shàng)去非常臃腫、雜亂(luàn)、不易維護但蝸蝸(wō)也知道,這不(bú)是Linux的錯,Linux是一個(gè)宏內核(hé),它必須麵對設備的多樣性,並實現對應的驅動。
為了降(jiàng)低(dī)設(shè)備多樣性帶來的Linux驅動開發的(de)複雜度,以及設備熱拔插處理、電源(yuán)管理等,Linux內核提出了設備模型(也稱作Driver Model)的概念(niàn)設備模型將工廠設備沙盤硬件設備歸納、分類,然後(hòu)抽象出一套標準的數據結構(gòu)和接口。
驅動的開發,就簡化為(wéi)對內核所(suǒ)規定的數據結構的填充和實現本文將會從設備模型的基本概念開始,通過分析內核相應的代碼(mǎ),一步一步解析Linux設(shè)備模型的實現及使用(yòng)方法二,Linux設備模型的基本概念2.1 Bus, Class, Device和Devi工廠設備沙盤ce Driver的概念。
下圖是嵌(qiàn)入式係統常見的(de)硬(yìng)件拓撲的一(yī)個示例:
更多Linux內核視頻教程文檔資料後台私信+【內核大禮包】自行獲取。
硬件拓撲描述(shù)Linux設備模型中四個重要概念(niàn)中(zhōng)三個:Bus,Class和Device(第四(sì)個為Device Driver,後麵會(huì)說)Bus(總線):Linux認(rèn)為(工(gōng)廠設備沙盤可以參考include/linux/device.h中struct bus_type的注釋),總線是CPU和一個或多個設備之間(jiān)信息交互的通道。
而為了方便設備模(mó)型的抽象,所有的設備都應連(lián)接到總線上(無論是CPU內部總線、虛擬的總線還是“platform Bus”)Class(分類):在Linux設備模(mó)工廠設備沙盤型中,Class的概念非常類似麵向對象(xiàng)程序設計中的Class(類),它主要是(shì)集(jí)合具有相似功能或屬性的設備,這樣就可以抽(chōu)象出一套可以在多個設備(bèi)之間共用的數據結構和接口函數。
因而從屬於相同Class的設備的驅動程序,就不(bú)再需要重複定(dìng)義這些公共資源(yuán),直接從Class中繼承即可Device(設備(bèi)):抽象係統工廠設備(bèi)沙盤中所有的硬件設備,描述(shù)它的名字、屬性、從屬的Bus、從(cóng)屬的Class等信息。
Device Driver(驅動):Linux設(shè)備模(mó)型(xíng)用Driver抽象硬件設(shè)備的驅動程序,它包含設備初始化、電源(yuán)管(guǎn)理相關的接口實現而Linux內核中的驅(qū)動開發,基本都圍繞該抽象進行(háng)(實(shí)現所規定的接口函數)。
注:什(shí)麽是Pla工廠設備沙盤(pán)tform Bus?在(zài)計算機中有這樣一類設備,它(tā)們通過各自的設備(bèi)控製器(qì),直接和CPU連接,CPU可以通過(guò)常規的尋址操作訪問它們(或(huò)者(zhě)說訪問它們的控製器)這種連接方(fāng)式(shì),並不屬於傳統意義上的總線連接。
但設備模型應該具備普適性(xìng),因此Linux就虛構了一條Platform Bus,供這些設備掛靠2.2 設備工廠設備沙盤模型的核心思想Linux設備模型的核(hé)心思想是(通(tōng)過xxx手段,實現(xiàn)xxx目的(de)):
1. 用Device(struct device)和Device Driver(struct device_driver)兩個數據(jù)結構,分別從“有什麽用”和“怎麽用”兩個角度描述(shù)硬件設備這樣(yàng)就統一了編寫設備驅動的(de)格(gé)式,使(shǐ)工廠設備沙盤驅動開(kāi)發從論(lùn)述題變為(wéi)填空體,從而簡化了設備驅動的開發。
2. 同樣使(shǐ)用Device和Device Driver兩個數據結(jié)構,實現(xiàn)硬件(jiàn)設備的即插(chā)即用(yòng)(熱拔插)在Linux內核中,隻要(yào)任何Device和Device Driver具有相同的名字,內核就會執行Device Driver結構中的初始化函數(pr工廠設備沙(shā)盤obe),該函(hán)數會(huì)初始(shǐ)化設備,使其為可用狀態(tài)。
而對大(dà)多數(shù)熱拔插設備而言,它們的Device Driver一直存在內核中當設備沒有插入(rù)時,其Device結(jié)構不存在,因而其Driver也就不執行初(chū)始化操作當設備插入時,內核會創建一個Device結構(名稱(chēng)和Driver相同),此時就會觸發Driver的執(zhí)工廠設備沙盤(pán)行。
這就是即(jí)插即用的概(gài)念3. 通過"Bus-->Device”類型的樹狀結構(見2.1章(zhāng)節的圖例)解決設備之間的依(yī)賴,而這種依賴在開(kāi)關機、電源管理等過程中尤為(wéi)重要試(shì)想,一個設(shè)備掛載在一條總(zǒng)線上,要啟動這個設備,必須先啟動它所掛載的總線。
很顯然,如(rú)果係統中設備非常多、依賴關係非常複雜的時候,無論是內核工廠設(shè)備(bèi)沙盤還是驅動的開發人員,都無(wú)力維護這種關係而(ér)設備模型中的這種樹狀結構,可以自動處理這種依賴關係啟動某一(yī)個設備前,內核會檢查該(gāi)設(shè)備是否依賴(lài)其它設備或者總線,如果依賴(lài),則檢查所依賴的對象是否已經啟動,如果沒有,則會先(xiān)啟動它(tā)們,直到啟(qǐ)動該設備的條件具備為止。
而驅動開發人(rén)員需要做的,就是在編寫(xiě)設備驅動時,告知內工廠設備沙盤核該(gāi)設備的依賴關係即可4. 使用Class結構,在(zài)設備模型中引入麵向對象(xiàng)的概念,這(zhè)樣可以(yǐ)最大限度(dù)地抽象共性(xìng),減少(shǎo)驅(qū)動開發過程中的重(chóng)複勞動,降低工作量
Copyright © 2002-2020 上海潤之(zhī)模型設計有限公司 版權所(suǒ)有 展示模型,展品模型,展廳模型,展示(shì)道具,展廳展品(pǐn),展品道具(jù),模(mó)型定製,模型公司,上海(hǎi)模型公司 備案號:滬ICP備20018260號