設備樹基本(ben)語法(fa)及屬性分析
時間:2018-09-27 來源:未知
一:什么是設備樹
設(she)備(bei)樹(shu)(shu)(Device Tree)是一(yi)種描(miao)述(shu)硬(ying)件(jian)的(de)數據結(jie)構,是結(jie)構化的(de)語言(yan),有(you)點像(xiang)C語言(yan)的(de)結(jie)構體(ti)。在操作(zuo)系(xi)統引導(dao)啟動階(jie)段進(jin)行(xing)設(she)備(bei)初(chu)始(shi)化的(de)時候(hou),設(she)備(bei)樹(shu)(shu)中(zhong)描(miao)述(shu)硬(ying)件(jian)的(de)信(xin)息(xi)被檢測到并傳遞給操作(zuo)系(xi)統。
本文引用地址://fsbing.cn/emb/Column/7506.html
二:設備樹起源與意義
設(she)備(bei)樹在2011年被(bei)引(yin)入到ARM Linux內核中(zhong),也就是(shi)在Linux內核3.x以后引(yin)入的(de),在內核3.x之前都(dou)是(shi)沒有設(she)備(bei)樹的(de)概念的(de),都(dou)是(shi)使用平臺文件(jian)來(lai)描(miao)述(shu)硬(ying)件(jian)的(de)。它(ta)的(de)引(yin)入主要(yao)是(shi)想解決(jue)ARM Linux內核代碼冗余的(de)問題。
三:內核中與設備樹相關的文件
dts文件,Device Tree Source,是以(yi)ASCII文本形式來描述設備樹內容。
dtb文件(jian)是二進(jin)制格式,是編譯(yi)后終(zhong)生成的二進(jin)制文件(jian)。
dtsi文(wen)件,類似于(yu)C語言頭文(wen)件。
四:基本語法

1. 節點
節點名
語法: <name>
名字的命(ming)名是由字符、數字、“-”等組成,長是31個字符,一(yi)般是設備(bei)類型命(ming)名,unit-address一(yi)般的是設備(bei)地(di)址。
比如:

對于(yu)節點(dian)來說,有節點(dian)引(yin)用、合并節點(dian)內(nei)容、替換節點(dian)內(nei)容。
節(jie)點引用另一個節(jie)點:

demo節(jie)點的(de)屬性item引(yin)用了節(jie)點的(de)node的(de)屬性值。
節點內容引用
有時候在一個節點(dian)中會引用到其他節點(dian)的屬性(xing)值,會使用到節點(dian)內容引用。

節點內容合并
有時候一(yi)個硬件設備的(de)部分信息內(nei)(nei)容可能會(hui)有變化(hua),這(zhe)里可能會(hui)出(chu)現節點內(nei)(nei)容合并(bing)的(de)概念。

移植(zhi)者(zhe)在根節(jie)點(dian)中添加一個node節(jie)點(dian),節(jie)點(dian)中的(de)內容與上面的(de)節(jie)點(dian)內容是不同,此時需(xu)要(yao)合并,合并完成結果如下(xia):

節點內容替換
在根(gen)節點中有相(xiang)同名字的(de)子節點,此時會出現替換內(nei)容(rong)的(de)概念。

內容(rong)替換完(wan)成后的結果如下:

節點查找
通過節(jie)點(dian)(dian)的compatible屬性值查找指定(ding)節(jie)點(dian)(dian)
通過節點名查(cha)找(zhao)指定節點
通過節(jie)點(dian)路徑查找指定節(jie)點(dian)
2. 節點屬(shu)性分析
設備樹(shu)中常(chang)見的屬性(xing)有(you)compatible、地(di)址address、中斷interrupt、MAC地(di)址、GPIO口(kou)、clock、power、regulator、等等。

compatible屬(shu)性
該屬(shu)性是用(yong)于匹配設備節點和設備驅(qu)動的。
在設備樹中compatible="davicom,dm9000";需要與驅動代(dai)碼中的.compatible匹配(pei)。

address屬性
#address-cells:描述(shu)子節點reg屬性值的(de)地址表中首(shou)地址cell數(shu)量
#size-cells:描述子(zi)節點reg屬性值的地址表中地址長度cell數量
reg:描述地址表,I/O地址。
父(fu)節點#address-cells值(zhi)(zhi)為(wei)1,#size-cells值(zhi)(zhi)為(wei)1,則(ze)子節點中reg的(de)值(zhi)(zhi)就(jiu)是一個(ge)首(shou)地(di)址加一個(ge)地(di)址長度為(wei)一個(ge)單元。
ranges:有(you)些設備是有(you)片(pian)選(xuan)(xuan)的,所以(yi)需(xu)要描述片(pian)選(xuan)(xuan)和片(pian)選(xuan)(xuan)的偏移量,在(zai)地址說明(ming)的時候還要說明(ming)地址映射范(fan)圍。

舉例說明,

片(pian)選0,偏移(yi)0,被映射到(dao)CPU地址空(kong)間(jian)的0x10100000~0x10110000中,地址長度(du)為0x10000。
interrupt屬性
interrupt-parent 標識此設備(bei)節點屬于哪一個中斷控制器,如(ru)果沒有設置(zhi)這個屬性,會自動依附父節點的;
interrupts 一(yi)個(ge)中斷(duan)標識(shi)符列(lie)表,表示(shi)每一(yi)個(ge)中斷(duan)輸(shu)出信號,引(yin)用中斷(duan)號及(ji)中斷(duan)觸(chu)發類型
#interrupt-cells 這(zhe)是中(zhong)斷控制器節點的屬性,用來標識這(zhe)個控制器需要幾(ji)個單位(wei)做中(zhong)斷描述(shu)符;
interrupt-controller 一個空屬性用(yong)來聲明這個node接收中斷(duan)信號;
比如:父節點的#interrupt-cells的值(zhi)是(shi)3,則子節點的interrupts一(yi)個(ge)(ge)cell有三個(ge)(ge)32bits整型值(zhi),<中(zhong)斷域 中(zhong)斷 觸發方式(shi)>

gpio屬性
gpio-controller:說明該節(jie)點描述的是一個gpio控制器
#gpio-cells:描述(shu)gpio使用節點的屬性一個cell的內(nei)容(rong)
屬性(xing)名=<&引用GPIO節點別(bie)名 GPIO標(biao)號 工作模式>;
