基本概念 匯流排
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...