概念
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"。
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無(wú)線安全]玩轉(zhuǎn)無(wú)線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問(wèn)題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來(lái)看看(二) 2017-07-26