linux裝置驅動模型架構分析 一

2021-08-21 05:15:23 字數 3471 閱讀 1746

lddm與驅動程式密切相關,而驅動程式處於linux系統中的什麼位置呢?我們自頂向下一步步來說,先看下圖[以下內容以中的內容為主體結合自己的認識和對於4.1核心的修改,這個系列文章非常好,推薦],linux由五個部分組成

,也稱作程序管理、程序排程。負責管理

cpu資源,以便讓各個程序可以以盡量公平的方式訪問

cpu。

memory

(記憶體)資源,以便讓各個程序可以安全地共享機器的記憶體資源。另外,記憶體管理會提供虛擬記憶體的機制,該機制可以讓程序使用多於系統可用

memory

的記憶體,不用的記憶體會通過檔案系統儲存在外部非易失儲存器中,需要使用的時候,再取回到記憶體中。

virtual file system

),虛擬檔案系統。

linux

核心將不同功能的外部裝置,例如

disk

裝置(硬碟、磁碟、

nand flash

、nor flash

等)、輸入輸出裝置、顯示裝置等等,抽象為可以通過統一的檔案操作介面(

open

、close

、read

、write

等)來訪問。

這就是linux系統「一切皆是檔案」的體現(其實

linux

做的並不徹底,因為

cpu、記憶體、網路等還不是檔案,如果真的需要一切皆是檔案)。

inter-process communication

),程序間通訊。

ipc不管理任何的硬體,它主要負責

linux

系統中程序之間的通訊。

vfs子系統包含

5個模組:

,裝置驅動,用於控制所有的外部裝置及控制器。由於存在大量不能相互相容的硬體裝置(特別是嵌入式產品),所以也有非常多的裝置驅動。因此,

linux核心中將近一半的

source code

都是裝置驅動

,大多數的linux底層工程師(特別是國內的企業)都是在編寫或者維護裝置驅動,而無暇估計其它內容(它們恰恰是

linux

核心的精髓所在)。

linux

裝置驅動模型的核心思想。

,每一種檔案系統,都會對應乙個logical system(邏輯檔案系統),它會實現具體的檔案系統邏輯。使用

mount

命令可以看到。

linux

裝置驅動模型的核心思想。

linux

的優點),導致

linux

核心中有一半的**是裝置驅動,而且隨著硬體的快速公升級換代,裝置驅動的**量也在快速增長。

為了降低裝置多樣性帶來的linux驅動開發的複雜度

,以及裝置熱拔插處理、電源管理等,linux核心提出了裝置模型(也稱作

driver model

)的概念。裝置模型將硬體裝置歸納、分類,然後抽象出一套標準的資料結構和介面。驅動的開發,

就簡化為對核心所規定的資料結構的填充和實現。抽象

描述。lddm

核心程式協調驅動與新裝置之間的關係。

/sys

檔案系統實現,即通過裝置模型實現。

使用一系列抽象(物件導向設計裡的類),提供統一的裝置管理檢視,這些抽象包括:

匯流排、類、裝置和裝置驅動。

:匯流排是cpu和乙個或多個裝置之間資訊互動的通道。而為了方便裝置模型的抽象,所有的裝置都應連線到匯流排上

,無論是cpu內部匯流排、虛擬的匯流排還是「

platform bus」(

在計算機中有這樣一類裝置,它們通過各自的裝置控制器,直接和cpu連線,

cpu可以通過常規的定址操作訪問它們(或者說訪問它們的控制器)。這種連線方式,並不屬於傳統意義上的匯流排連線。但裝置模型應該具備普適性,因此

linux

就虛構了一條

platform bus

,供這些裝置掛靠。)。

:在linux裝置模型中,

class

的概念非常類似物件導向程式設計中的

class

(類),它主要是集合具有相似功能或屬性的裝置,這樣就可以抽象出一套可以在多個裝置之間共用的資料結構和介面函式。因而從屬於相同

class

的裝置的驅動程式,就不再需要重複定義這些公共資源,直接從

class

中繼承即可。

:抽象系統中所有的硬體裝置,描述它的名字、屬性、從屬的bus、從屬的

class

等資訊。

device driver(裝置驅動)

,linux裝置模型用

driver

抽象硬體裝置的驅動程式,它包含裝置初始化、電源管理相關的介面實現。而

linux

核心中的驅動開發,基本都圍繞該抽象進行(實現所規定的介面函式)。

sys檔案系統展示了裝置驅動模型的內在結構,我們通過

sys檔案系統來看看上述抽象如何組織在一起,如何有序的管理

linux

裝置:

,包括裝置樹、匯流排樹、類樹,即使乙個簡單的系統裝置模型也會包含幾百個節點,但是linux裝置驅動模型**會處理好這些關係,模型隱藏在互動背後。

linux裝置驅動模型的核心思想是

:device

(struct device)和

device driver

(struct device_driver)兩個資料結構,分別從

「有什麼用」

和「怎麼用」

兩個角度描述硬體裝置。這樣就統一了編寫裝置驅動的格式,使驅動開發從論述題變為填空體,從而簡化了裝置驅動的開發。

device

和device driver

兩個資料結構,實現硬體裝置的即插即用(熱拔插)。

device

和device driver

具有相同的名字,核心就會執行

device driver

結構中的初始化函式(

probe

),該函式會初始化裝置,使其為可用狀態。

device

結構不存在,因而其

driver

也就不執行初始化操作。

當裝置插入時,核心會建立乙個device結構(名稱和

driver

相同),此時就會觸發driver的執行。這就是即插即用的概念。

"bus-->device

」型別的樹狀結構解決裝置之間的依賴,而這種依賴在開關機、電源管理等過程中尤為重要。

class

結構,在裝置模型中引入物件導向的概念,這樣可以最大限度地抽象共性,減少驅動開發過程中的重複勞動,降低工作量。

Linux裝置驅動模型

核心版本 2.6.29 裝置驅動模型框架是linux驅動程式設計的基礎。它通過kobject,kset,ktype等底層資料結構將bus type,device,device driver 等高層資料結構組織起來,形成乙個層次 分類清晰的驅動模型。優點如下 1.重用。將物件抽象為匯流排 驅動 裝置三...

linux驅動模型 裝置

thebasic device structure see the kerneldoc for the struct device.programminginte ce 檢測到裝置的匯流排驅動使用如下函式將裝置註冊到核心 int device register struct device dev 匯...

Linux裝置驅動模型

一 裝置驅動模型 驅動模型提供硬體的抽象,核心可以使用該抽象完成很多重複的工作。這些抽象主要有 電源管理,即插即用裝置支援,與使用者空間的通訊 二 核心資料結構 kobject 通過它可以以樹狀結構來管理裝置 kobj type 用來表示kobject的屬性 三 三大元件 匯流排 裝置 驅動 匯流排...