下圖是一個(gè)設(shè)備樹(shù)文件的基本架構(gòu)示例:
簡(jiǎn)單概括一下有這幾個(gè)部分:
節(jié)點(diǎn)
節(jié)點(diǎn)的命名方式一般為node-name@unit-address:
其中node-name為節(jié)點(diǎn)名稱(chēng),unit-address為節(jié)點(diǎn)地址。例如上示例圖中node@0的node為節(jié)點(diǎn)名稱(chēng);0就是節(jié)點(diǎn)的地址,地址主要是為了區(qū)分其他的節(jié)點(diǎn)以保證節(jié)點(diǎn)的唯一性,節(jié)點(diǎn)地址是非必須的,可以省略。
在一個(gè)節(jié)點(diǎn)下面可包含一系列的子節(jié)點(diǎn),例如上示例圖的note@0下面又可包含其自己的子節(jié)點(diǎn)child-node@0和child-node@1。
下面是幾種常見(jiàn)的節(jié)點(diǎn):
根節(jié)點(diǎn)
設(shè)備樹(shù)文件中都包含一個(gè)根節(jié)點(diǎn),使用“/”表示。
CPU節(jié)點(diǎn)
memory節(jié)點(diǎn)
該節(jié)點(diǎn)是設(shè)置內(nèi)存起始地址及其大小。
屬性
每個(gè)節(jié)點(diǎn)都有不同屬性,屬性包括屬性名稱(chēng)和屬性值,屬性值可以為空或任意的字節(jié)流屬性,一般屬性值有三類(lèi):
string字符串型,使用雙引號(hào)“”包含;
byte數(shù)組型:使用方括號(hào)[]包含;
u32型:使用尖括號(hào)<>包含;
如示例圖中節(jié)點(diǎn):
node@0的第一個(gè)屬性名稱(chēng)是a-string-property,屬性值為字符串“string”;
node@0的第三個(gè)屬性名稱(chēng)為a-byte-data-property,其屬性值為byte數(shù)組:[0x01 0x02 0x03 0x04],
node1(node@1)節(jié)點(diǎn)的a-cell-property屬性值為u32型<1 2 3 4>。
常見(jiàn)的屬性:
compatible
compatible是兼容的意思,即該設(shè)備可被一個(gè)或者多個(gè)驅(qū)動(dòng)匹配。例如在
arch/arm/boot/dts/imx6ull-elf1-emmc.dts文件中的pxp_v4l2節(jié)點(diǎn):
此節(jié)點(diǎn)的Compatible的值為“"fsl,imx6ul-pxp-v4l2", "fsl,imx6sx-pxp-v4l2", "fsl,imx6sl-pxp-v4l2",內(nèi)核在解析設(shè)備樹(shù)之后,會(huì)首先根據(jù)“fsl,imx6ul-pxp-v4l2”查找匹配驅(qū)動(dòng)模塊,其中“fsl”是廠商名稱(chēng),“mx6ul-pxp-v4l2”是驅(qū)動(dòng)模塊的名稱(chēng)。如果沒(méi)有匹配到此驅(qū)動(dòng)模塊,就會(huì)再次使用”fsl,imx6sx-pxp-v4l2”進(jìn)行查找匹配,依次類(lèi)推。
model
model屬性用于表示設(shè)備型號(hào)信息。如下圖中model = "Freescale i.MX6 ULL 14x14 EVK Board",表示該設(shè)備為freescale的i.MX6ULL EVK板。
再如下圖sound節(jié)點(diǎn),設(shè)備型號(hào)信息為nau8822-audio:
#address-cells,#size-cells,reg
reg屬性用來(lái)表示節(jié)點(diǎn)地址資源的,屬性值一般是寄存器的起始地址及地址之后連續(xù)的空間長(zhǎng)度。
#address-cells,#size-cells分別表示子節(jié)點(diǎn)中reg的地址以及地址之后連續(xù)的空間長(zhǎng)度用幾個(gè)32bit數(shù)據(jù)表示。
如上圖,#address-cells=<1>,表示其子節(jié)點(diǎn)ocrams中reg的地址是用一個(gè)32bit數(shù)據(jù)表示,上圖中的0x00900000。#size-cells=<1>,說(shuō)明其子節(jié)點(diǎn)ocrams中reg地址之后的空間長(zhǎng)度也是用一個(gè)32bit數(shù)據(jù)表示,上圖中的0x4000。
status
status屬性用來(lái)表示節(jié)點(diǎn)的狀態(tài),即相關(guān)硬件的狀態(tài),用字符串表示。'okay'表示硬件正常工作,“disabled”表示硬件當(dāng)前不可用,“fail”表示因?yàn)槌鲥e(cuò)不可用,“fail-sss”表示因?yàn)槟撤N原因出錯(cuò)不可用,sss表示具體的出錯(cuò)原因。實(shí)際中,基本只用'okay'和'disabled'。
標(biāo)簽
圖中的node1: node@1節(jié)點(diǎn),其中node1就是本節(jié)點(diǎn)的一個(gè)標(biāo)簽,標(biāo)簽不是必須的,定義標(biāo)簽主要為了方便在其他地方對(duì)該節(jié)點(diǎn)進(jìn)行引用的時(shí)候,不必寫(xiě)該節(jié)點(diǎn)的全路徑,直接使用標(biāo)簽即可。如在node@0的子節(jié)點(diǎn)child-node@0的第三個(gè)屬性就引用了node1(&node1)。