Platform: MSM8X39
OS: Android4.4
标准properties是规范里就有对它的定义,然后有对应的接口可以读取解析。当然
你也可以自己添加自定义的properties.
Property: compatible
Value type: <stringlist>
Des:
该属性被系统用来选择哪个driver来驱动device。 Value可以是字符串列表。
推荐的格式是: “manufacturer, model”, 前者用来描述厂商,后者用来描述model number(后面会讲到)。
例子:
[msm8939-camera.dtsi]
系统会找支持”qcom,csiphy-v3.1”的driver,如果没找到才找”qcom,csiphy”的driver.
Property: model
Value type: <string>
Des:
Model指明了设备属于哪一个厂商的哪一个model。
例子:
[msm8939-pinctrl.dtsi]
说明是Qualcomm公司,用的chipset是msm8939.
Property: phandle
Value type: <u32>
Des:
说白了,phandle其实就是类似于C++的句柄,在这里就是表示一个node。
如果另外一个node要引用此node,那么就使用期phandle, 它的value是u32.
为了方便表示,DT也提供了名字描述,解析时,系统会默认将名字转换成唯一的一个U32值。
例子1(整数表示):
Pic对应的phandle值是1, interrupt的parent就是<1>,也就是pic。
例子1(名字表示):
[msm8939-pinctrl.dtsi]
:左边的是可选项,只是一个lable,表示gp这个node,效果和用phandle=<number>
一样。
Pmx-uartconsole引用了gp用&gp表示就可以了。
Property: status
Value type: <string>
Des:
表示当前device的操作状态,可定义的值如下,如果要可使用,必须定义成”okay”。
Property: #address-cells/#size-cells
Value type: <u32>
Des:
DT的node是可嵌套和继承的,因此需要定义它的子node应该如何寻址。
#address-cells
用来定义reg property中的address 域,而#size-cells
用来定义reg property中的size域。
Note:
1. 这两个值不会从它的祖先集成,所以需要明确定义。
2. 如果没有定义,默认情况下,#address-cells是2, #size-cells是1.
例子1:
#address-cells
为1表明只有1个元素,address是0x4600.
#size-cells
为为1表明只有1个元素。size是0x100.
例子2:
[msm8939-pm.dtsi]
#address-cells
为1表明只有1个元素,#size-cells为0表示size没有。
Property:reg
Value type: <prop-encoded-array>
Des:
Reg property主要是用来描述寄存器的资源,一般情况下都是值寄存器地址以及map的长度。有些情况下也有不同的意义,如表示cpu的时候,它的意思只是表明cpu的编号,而且也没有长度。
<prop-encoded-array>
表示<address length>
这样可以有多组。如:
< 0x100 0x10>,
< 0x200 0x20>;
例子:
Property:ranges
Value type: <empty> or <prop-encoded-array>
Des:
Root node的子节点以及使用的是CPU的地址域,所以他们不需要任何直接映射。如[email protected]就是直接分配的0x120000地址。
但是那些非root node的直接子节点的节点就没有使用CPU地址域,为了得到一个内存映射地址,DT必须制定从一个域到另一个域地址的转换方法,ranges的意义就在此。
Ranges提供了当前node和parent node之间的地址转换。
Ranges 格式:
(child-bus-address, parent-bus-address, length)
Child-bus-address的cells由当前node的#address-cells决定。
Parent-bus-address的cells由parent node的#address-cells决定。
length的cells由当前 node的#size-cells决定。
当ranges被定义为<empty>
时,表明parent和child node的地址空间是一致的,不必要做转换。
如果没有定义ranges时,DT认为parent和child node之前没有映射关系。
例子:
Child node的物理地址0映射到Parent node的0xe000000, 长度是0x100000.
Serical的0x4600实际地址就是0xe0004600.
Property:device_type
Value type: <string>
Des:
它只用于描述cpu和memory nodes。
例子:
[msm8939-cpu.dtsi]