概念

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

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

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

延伸閱讀

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