Linux 裝置模型(中)之上層容器

2021-07-03 08:40:29 字數 2337 閱讀 5366

基本概念 匯流排

linux裝置模型是由匯流排(bus_type),裝置(device),驅動(device_driver)這三個資料結構來描述的。

匯流排是處理器和乙個或多個裝置之間的通道。

匯流排可以相互插入。裝置模型展示了匯流排和它們所控制的裝置之間的實際連線。

bus_type (匯流排)

linux 裝置模型中, 匯流排由 bus_type 結構表示

每個bus_type物件都對應/sys/bus目錄下的乙個子目錄,如pci匯流排型別對應於/sys/bus/pci。

在每個這樣的目錄下都存在兩個子目錄:devices和drivers(分別對應於bustype結構中的devices和drivers域)。

devices子目錄描述連線在該匯流排上的所有裝置

drivers子目錄描述與該匯流排關聯的所有驅動程式。

bus_type結構還包含幾個函式(match、hotplug等)處理相應的熱插拔、即插即拔和電源管理事件。

01.struct

bus_type ;    

int (*match)(struct device *device, struct device_driver *driver);

無論何時乙個新裝置或者驅動被新增給這個匯流排.如果給定的裝置可被給

定的驅動處理,這個方法應當返回乙個非零值 . 這個函式必須在匯流排級別

處理, 因為那是合適的邏輯存在的地方; 核心核心不能知道如何匹配每個

可能匯流排型別的裝置和驅動.

這個函式只是簡單對比驅動和裝置的名字是不是相同而已,來匹配驅動和裝置。

所以某個驅動和某個裝置一定要同名才能讓它們匹配起來。

int (*uevent)(struct device *dev, char **envp, int num_envp,

char *buffer, int buffer_size)

在為使用者空間產生熱插拔事件之前,這個方法允許匯流排新增環境變數。

匯流排屬性由bus_attribute結構描述,定義如下:

struct

bus_attribute   

需要注意的是,匯流排也是裝置,也必須按裝置註冊

匯流排的註冊使用:

bus_register(struct bus_type * bus)

若成功,新的匯流排將被新增進系統,並可在sysfs 的 /sys/bus 下看到。

匯流排的刪除使用:

void bus_unregister(struct bus_type *bus)

device(裝置)

linux 系統中的每個裝置由乙個 device物件描述

g_list 將該device物件掛接到全域性裝置鍊錶中,所有的 device物件都包含在devices subsys中,並組織成層次結構。

node域將該物件掛接到其兄弟物件的鍊錶中

bus list則用於將連線到相同匯流排上的裝置組織成煉表

driver list則將同一驅動程式管理的所有裝置組織為鍊錶。

device物件內嵌乙個kobject物件,用於引用計數管理並通過它實現裝置層次結構。

driver域指向管理該裝置的驅動程式物件,而 driver data則是提供給驅動程式的資料。

bus域描述裝置所連線的匯流排型別。

核心提供了相應的函式用於操作device物件。

device_register()函式將乙個新的device物件插入裝置模型,並自

動在/sys/devices下建立乙個對應的目錄。

device_unregister()完成相反的操作,登出裝置物件。 get_device()和put_device()分別增加與減少裝置物件的引用計數。

通常device結構不單獨使用,而是包含在更大的結構中作為乙個子結構使用,比如描述pci裝置的struct pci_dev

driver(驅動)

系統中的每個驅動程式由乙個device_driver物件描述

struct

device_driver ;  

device_driver物件依靠內嵌的kobject物件實現引用計數管理和層次結構組織。

對大多數驅動程式核心結構, device_driver 結構通常被嵌入到乙個更高層的、匯流排相關的結構中。

註冊與登出函式是:

int driver_register(struct device_driver *drv);

void driver_unregister(struct device_driver *drv);

Linux裝置模型(中)之上層容器

linux裝置模型是由匯流排 bus type 裝置 device 驅動 device driver 這三個資料結構來描述的。在裝置模型中,所有的裝置都通過匯流排來連線。即使有些裝置沒有連線到一根物理上的匯流排,linux為其設定了乙個內部的,虛擬的platform匯流排,來維持匯流排,驅動,裝置的...

Linux裝置模型

linux裝置驅動模型 我們在寫最簡單的裝置驅動程式的時候,我們將所有的硬體資訊都儲存在了驅動 中,這樣有乙個非常明顯的不足 會導致驅動程式的通用性極差,一旦硬體平台或硬體連線有鎖改變,就一定要修改驅動 為了解決這個問題,linux在2.6版本之後,新增了 匯流排 裝置 驅動 的linux裝置模型,...

linux裝置模型

linux核心的整體架構 linux裝置模型 linux裝置模型 1 基本概念 linux裝置模型 2 kobject linux裝置模型 3 uevent linux裝置模型 4 sysfs linux裝置模型 5 device和device driver linux裝置模型 6 bus linu...