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 文件就好。

  代碼架構如下圖所示:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM