概念

Linux內(nèi)核從3.x開始引入設(shè)備樹的概念,用于實現(xiàn)驅(qū)動代碼與設(shè)備信息相分離。在設(shè)備樹出現(xiàn)以前,所有關(guān)于設(shè)備的具體信息都要寫在驅(qū)動里,一旦外圍設(shè)備變化,驅(qū)動代碼就要重寫。引入了設(shè)備樹之后,驅(qū)動代碼只負(fù)責(zé)處理驅(qū)動的邏輯,而關(guān)于設(shè)備的具體信息存放到設(shè)備樹文件中,這樣,如果只是硬件接口信息的變化而沒有驅(qū)動邏輯的變化,驅(qū)動開發(fā)者只需要修改設(shè)備樹文件信息,不需要改寫驅(qū)動代碼。比如在ARM Linux內(nèi),一個.dts(device tree source)文件對應(yīng)一個ARM的machine,一般放置在內(nèi)核的"arch/arm/boot/dts/"目錄內(nèi),比如exynos4412參考板的板級設(shè)備樹文件就是"arch/arm/boot/dts/exynos4412-origen.dts"。這個文件可以通過$make dtbs命令編譯成二進制的.dtb文件供內(nèi)核驅(qū)動使用。

基于同樣的軟件分層設(shè)計的思想,由于一個SoC可能對應(yīng)多個machine,如果每個machine的設(shè)備樹都寫成一個完全獨立的.dts文件,那么勢必相當(dāng)一些.dts文件有重復(fù)的部分,為了解決這個問題,Linux設(shè)備樹目錄把一個SoC公用的部分或者多個machine共同的部分提煉為相應(yīng)的.dtsi文件。這樣每個.dts就只有自己差異的部分,公有的部分只需要"include"相應(yīng)的.dtsi文件, 這樣就是整個設(shè)備樹的管理更加有序。我這里用`Linux4.8.5源碼自帶的dm9000網(wǎng)卡為例來分析設(shè)備樹的使用和移植。這個網(wǎng)卡的設(shè)備樹節(jié)點信息在"Documentation/devicetree/bindings/net/davicom-dm9000.txt"有詳細(xì)說明,其網(wǎng)卡驅(qū)動源碼是"drivers/net/ethernet/davicom/dm9000.c"。

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運,軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式