linux驅動模型框架如圖所示

這裡寫圖片描述

1. kernfs

驅動最終是提供給使用者層使用,那麼其中的介面就是通過kernfs檔案系統來註冊,kernfs是一個通用的核心虛擬檔案系統

2. sysfs/kobject

sysfs是裝置驅動檔案系統,裝置之間的各種關係會在在/sys目錄下層層表現出來,sysfs典型的目錄結構如下

/sys # ls
block
bus
class
dev
devices
firmware
fs
kernel
module
power

一個硬體平臺上是由多種多樣的裝置的,那麼為了能把這些裝置都抽象出來統一由sysfs管理,linux核心就定義一個kobject結構體,/sys下的每個目錄都是通過kobject來抽象的,kset既是一個kobject,也是同類型kobject的一個集合,kobject和sysfs自然的繫結在一起,這樣能方便組織驅動中的各種聯絡

3. device - bus - driver

這部分是核心,驅動模型中會分裝置與驅動,兩個是獨立的,不同的裝置可以共用同一個驅動,在bus上,分別掛多種裝置與驅動,而裝置與驅動的匹配要通過bus來進行

4. 匯流排裝置層

上面是抽象出不同匯流排裝置驅動的概念,基於此就可以根據不同的匯流排來設計獨有的匯流排模型,最通用的就是platform匯流排,它是一個特殊的匯流排,因為不像usb/i2c等有實際的匯流排,它是抽象出來的,為平臺上一些裝置來服務