設備樹linux
A. 整理了一份Linux設備樹基礎知識,建議收藏!
在平台設備部分有簡述說明設備的兩種方法:一種是通過平台設備結構體指定;另一種是利用設備樹描述。本篇筆記將帶你初步了解設備樹的相關知識。
設備樹是描述設備信息(資源)的一棵樹形結構。設備樹文件通常以.dts/dtsi後綴保存,即設備樹源文件DTS(Device Tree Source)。這些文件與C代碼相似,但必須經過編譯轉換為可運行的二進制文件,例如使用dtc工具將.dts文件編譯生成的dtb文件,內核可以利用此文件。
引入設備樹的原因在於,隨著晶元技術的發展,Linux內核中包含越來越多描述設備的代碼,導致內核代碼變得臃腫。Linux之父Linus對此表示不滿,引入設備樹文件以精簡冗餘代碼,同時編譯.dts文件的過程比編譯.c文件並載入驅動模塊更為簡便,更適合開發流程。
設備樹源文件編寫遵循特定規則,類似C語言的語法。包括節點格式、屬性格式、一些標准屬性等。節點格式以label:node-name@unit-address形式表示,其中label(可選)、node-name和unit-address分別代表標號、節點名和單元地址。屬性格式通常為「name=value」,包含interrupts、clock-frequency、compatible、local-mac-address等。
標准屬性如compatible表示「兼容性」,用於描述硬體兼容的驅動程序列表;model屬性則更明確地定義硬體類型;status屬性描述設備狀態,如可用或不可用;address-cells和#size-cells屬性用於描述地址和大小的位數;reg屬性表示地址和大小的范圍。
常見的設備樹節點包括根節點、CPU節點、memory節點和chosen節點。根節點用「/」標識,CPU節點通常自動設置,memory節點由板廠配置,chosen節點用於內核參數傳遞。
操作設備樹的函數主要由「of_」前綴的函數組成,如查找節點的of_find_node_by_name、of_find_node_by_type、of_find_compatible_node等,以及提取屬性值的of_find_property、of_property_count_elems_of_size等。
通過設備樹,我們可以更靈活地管理設備資源,簡化內核代碼結構,並提供更便捷的設備驅動匹配和參數傳遞方式。設備樹為Linux內核提供了更為高效和模塊化的設備管理解決方案。