日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux设备驱动模型架构分析(一)——概述

發(fā)布時間:2023/12/31 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux设备驱动模型架构分析(一)——概述 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

概述

LDD3中說:“Linux內核需要一個對系統(tǒng)結構的一般性描述。”這個描述就是linux設備驅動模型(下面簡稱為LDDM)。LDDM不是獨立存在,其體系如下圖所示:


LDDM體系結構


對架構的每一部分本文都會開辟獨立的章節(jié)進行描述。暫且拋開這個架構,首先從總體上了解一下LDDM。

LDDM與驅動程序密切相關,而驅動程序處于linux系統(tǒng)中的什么位置呢?我們自頂向下一步步來說,先看下圖[以下內容以http://www.wowotech.net/sort/device_model中的內容為主體結合自己的認識和對于4.1內核的修改,這個系列文章非常好,推薦],linux由五個部分組成



1. Process Scheduler,也稱作進程管理、進程調度。負責管理CPU資源,以便讓各個進程可以以盡量公平的方式訪問CPU

2. Memory Manager,內存管理。負責管理Memory(內存)資源,以便讓各個進程可以安全地共享機器的內存資源。另外,內存管理會提供虛擬內存的機制,該機制可以讓進程使用多于系統(tǒng)可用Memory的內存,不用的內存會通過文件系統(tǒng)保存在外部非易失存儲器中,需要使用的時候,再取回到內存中。

3. VFSVirtual File System),虛擬文件系統(tǒng)。Linux內核將不同功能的外部設備,例如Disk設備(硬盤、磁盤、NAND FlashNor Flash等)、輸入輸出設備、顯示設備等等,抽象為可以通過統(tǒng)一的文件操作接口(openclosereadwrite等)來訪問。這就是Linux系統(tǒng)“一切皆是文件”的體現(xiàn)(其實Linux做的并不徹底,因為CPU、內存、網絡等還不是文件,如果真的需要一切皆是文件)。

4. Network,網絡子系統(tǒng)。負責管理系統(tǒng)的網絡設備,并實現(xiàn)多種多樣的網絡標準。

5. IPCInter-Process Communication),進程間通信。IPC不管理任何的硬件,它主要負責Linux系統(tǒng)中進程之間的通信。

其中與設備驅動相關的是VFS子系統(tǒng),VFS子系統(tǒng)包含5個模塊:



1. Device Drivers,設備驅動,用于控制所有的外部設備及控制器。由于存在大量不能相互兼容的硬件設備(特別是嵌入式產品),所以也有非常多的設備驅動。因此,Linux內核中將近一半的Source Code都是設備驅動,大多數(shù)的Linux底層工程師(特別是國內的企業(yè))都是在編寫或者維護設備驅動,而無暇估計其它內容(它們恰恰是Linux內核的精髓所在)。

2. Device Independent Interface, 該模塊定義了描述硬件設備的統(tǒng)一方式(統(tǒng)一設備模型),所有的設備驅動都遵守這個定義,可以降低開發(fā)的難度。同時可以用一致的形勢向上提供接口。這一層體現(xiàn)了linux設備驅動模型的核心思想。

3. Logical Systems,每一種文件系統(tǒng),都會對應一個Logical System(邏輯文件系統(tǒng)),它會實現(xiàn)具體的文件系統(tǒng)邏輯。使用mount命令可以看到。

4. System Independent Interface,該模塊負責以統(tǒng)一的接口(塊設備和字符設備)表示硬件設備和邏輯文件系統(tǒng),這樣上層軟件就不再關心具體的硬件形態(tài)了。

5. System Call?Interface,系統(tǒng)調用接口,向用戶空間提供訪問文件系統(tǒng)和硬件設備的統(tǒng)一的接口。

從圖中可以看出,VFS包含了設備驅動的大部分內容(網絡驅動不屬于“文件”),設備無關接口體現(xiàn)的就是linux設備驅動模型的核心思想。

LDDM核心思想

如前所述,由于Linux支持世界上幾乎所有的、不同功能的硬件設備(這是Linux的優(yōu)點),導致Linux內核中有一半的代碼是設備驅動,而且隨著硬件的快速升級換代,設備驅動的代碼量也在快速增長。為了降低設備多樣性帶來的Linux驅動開發(fā)的復雜度,以及設備熱拔插處理、電源管理等,Linux內核提出了設備模型(也稱作Driver Model)的概念。設備模型將硬件設備歸納、分類,然后抽象出一套標準的數(shù)據結構和接口。驅動的開發(fā),就簡化為對內核所規(guī)定的數(shù)據結構的填充和實現(xiàn)

因此,Linux設備驅動模型是一種抽象,為內核建立起統(tǒng)一的設備模型。其目的是:

提供一個對系統(tǒng)結構的一般性抽象描述。

LDDM跟蹤所有系統(tǒng)所知道的設備,以便讓LDDM核心程序協(xié)調驅動與新設備之間的關系。

內核使用Linux設備驅動模型支持如下任務:

1. 電源管理和系統(tǒng)關機

2. 與用戶空間通信

???sys虛擬文件系統(tǒng)的實現(xiàn)與設備模型密切相關,并且向外界展示了它所表述的結構。向用戶空間所提供的系統(tǒng)信息,以及改變操作參數(shù)的接口,都要通過/sys文件系統(tǒng)實現(xiàn),即通過設備模型實現(xiàn)。

3. 熱插拔設備

???處理與用戶空間進行熱插拔設備的通信是通過設備模型管理的。

4. 設備類型

???設備模型包括了對設備分類的機制,它會在更高的功能層上描述這些設備,并使得這些設備對用戶空間可見。尤其是將命名設備的功能從內核層轉移到用戶層,大大提高了設備管理的靈活性。

5. 對象生命周期管理

???設備模型實現(xiàn)一系列機制以處理對象的生命周期、對象之間的關系,以及這些對象在用戶空間中的表示。簡化編程人員創(chuàng)建和管理對象的工作。

Linux設備驅動模型使用一系列抽象(面向對象設計里的類),提供統(tǒng)一的設備管理視圖,這些抽象包括:總線、類、設備和設備驅動。

Bus(總線):總線是CPU和一個或多個設備之間信息交互的通道。而為了方便設備模型的抽象,所有的設備都應連接到總線上無論是CPU內部總線、虛擬的總線還是“platform Bus在計算機中有這樣一類設備,它們通過各自的設備控制器,直接和CPU連接,CPU可以通過常規(guī)的尋址操作訪問它們(或者說訪問它們的控制器)。這種連接方式,并不屬于傳統(tǒng)意義上的總線連接。但設備模型應該具備普適性,因此Linux就虛構了一條Platform Bus,供這些設備掛靠。

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

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

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

上面提到過,Linux內核通過sys文件系統(tǒng)展示了設備驅動模型的內在結構,我們通過sys文件系統(tǒng)來看看上述抽象如何組織在一起,如何有序的管理linux設備:



可以看到,linux驅動模型是個復雜的體系,包括設備樹、總線樹、類樹,即使一個簡單的系統(tǒng)設備模型也會包含幾百個節(jié)點,但是Linux設備驅動模型代碼會處理好這些關系,模型隱藏在交互背后。

綜上所述,Linux設備驅動模型的核心思想是

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

2. 同樣使用DeviceDevice Driver兩個數(shù)據結構,實現(xiàn)硬件設備的即插即用(熱拔插)。

Linux內核中,只要任何DeviceDevice Driver具有相同的名字,內核就會執(zhí)行Device Driver結構中的初始化函數(shù)(probe),該函數(shù)會初始化設備,使其為可用狀態(tài)。

而對大多數(shù)熱拔插設備而言,它們的Device Driver一直存在內核中。當設備沒有插入時,其Device結構不存在,因而其Driver也就不執(zhí)行初始化操作。當設備插入時,內核會創(chuàng)建一個Device結構(名稱和Driver相同),此時就會觸發(fā)Driver的執(zhí)行。這就是即插即用的概念。

3. 通過"Bus-->Device”類型的樹狀結構解決設備之間的依賴,而這種依賴在開關機、電源管理等過程中尤為重要。

試想,一個設備掛載在一條總線上,要啟動這個設備,必須先啟動它所掛載的總線。很顯然,如果系統(tǒng)中設備非常多、依賴關系非常復雜的時候,無論是內核還是驅動的開發(fā)人員,都無力維護這種關系。

而設備模型中的這種樹狀結構,可以自動處理這種依賴關系。啟動某一個設備前,內核會檢查該設備是否依賴其它設備或者總線,如果依賴,則檢查所依賴的對象是否已經啟動,如果沒有,則會先啟動它們,直到啟動該設備的條件具備為止。而驅動開發(fā)人員需要做的,就是在編寫設備驅動時,告知內核該設備的依賴關系即可。

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


總結

以上是生活随笔為你收集整理的linux设备驱动模型架构分析(一)——概述的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。