1. 程式人生 > 實用技巧 >Linux 匯流排、裝置、驅動模型 與 裝置樹

Linux 匯流排、裝置、驅動模型 與 裝置樹

Linux 匯流排、裝置、驅動模型 與 裝置樹

1.匯流排、裝置、驅動模型

本著高內聚、低耦合的原則,Linux 把裝置驅動模型分為了匯流排、裝置和驅動三個實體,這三個實體在核心裡的職責分別如下:

裝置和驅動向匯流排進行註冊,匯流排負責把裝置和對應的驅動繫結起來。

驅動通過匯流排 API 介面 platform_get_resource() 取得板級裝置資訊,這樣驅動和裝置之間就實現了高內聚、低耦合的設計,

無論裝置怎麼換,驅動都可以巋然不動。

程式碼架構如下圖所示:

2、裝置樹

引入裝置樹之前,關於硬體裝置的描述資訊一般放在一個個類似 arch/xxx/mach-xxx/board-xxx.c 的檔案中,

這些程式碼中除了描述的裝置資訊不同,其程式碼邏輯都是一樣的。我們有理由,把這些裝置端的資訊,用一個非 C 的指令碼語言來描述,這個指令碼檔案,就是 Device Tree(裝置樹)。

裝置樹是一種 dts 檔案,它用簡單的語法描述每個板子上的所有裝置,以及這些裝置的連線資訊。

裝置樹檔案儲存在目錄 arch/xxx/boot/dts 中,每一個 board 對應一個 dts 檔案。

引入裝置樹之後,大量重複的 C 程式碼(arch/xxx/mach-xxx/board-xxx.c)被去除——驅動的歸於驅動 C 程式碼,裝置的歸於裝置樹指令碼檔案。

arch/arm/mach-xxx/board-a.c 這樣的檔案永遠地進入了歷史的故紙堆,換個板子,只要換個 Device Tree 檔案就好。

程式碼架構如下圖所示: