所有的dts设备都会在/sys/devices/platform生成一个目录,其下的of_node可以查看节点属性
设备树数据表现形式:
1.cells:使用尖括号限定,32位无符号整数
2.字符串:使用双引号限定
3.二进制数据:用方括号限定
设备树语法:
/memreserve/ <address> <length>;
[lavbel:]node-name[@unit-address]{
[properties definitions];
[child nodes];
};
对于相同的节点的不同属性信息都会被合并,相同节点的相同的属性会被重写,这个语法可以避免移植者四处找节点,直接在板级.dts增改即可
指定节点需要使用全路径,使用引用比较方便,引用可以通过&alises,&lable和handle值表示
设备树查错,可以将编译出来的dtb转换成dts,查询节点属性最后的取值
/script/dtc/dtc -I dtb -O dts -o tmp.dts xxx.dtb
特殊的属性:
#address-cells:设备节点属性,reg属性使用n个32位整数表示地址,如64位系统n=2
#size-cells:设备节点属性,reg属性使用n个32位整数表示数据长度
每个可编址设备都有一个reg,属性对应platform_device的IORESOURCE_MEM资源,对于上述两个属性,可继承自父节点
range:设备节点属性,完成地址映射,格式为<字地址 父地址 字地址空间区域大小> ,为空表示一样的地址域
interrupt-controller:中断控制节点的专用属性,值为空,表明节点是一个中断控制节点
#interrupt-cells:中断控制节点的专用属性,表示中断指示符cell的个数,类似于#address-cells
interrupt-parent:设备节点属性,节点的中断控制器,可继承自父节点,一般值为一个引用
interrupts:设备节点属性,中断指示符列表
phandle:设备节点属性,作为该设备在其他地方的引用值,使用lable作为节点引用的时候,dtc编译器自动为节点产生phandle值
特殊节点:
chosen:可以用来设置bootargs启动参数
alises:用于指定节点的别名
DTB格式
------------------------------------
| struct ftd_header |
--------------------------------------
| memory reservation block |
------------------------------------
| structure block |
------------------------------------
| strings block |
-------------------------------------
struct fdt_header {
uint32_t magic;
uint32_t totalsize;
uint32_t off_dt_struct;
uint32_t off_dt_strings;
uint32_t off_mem_rsvmap;
uint32_t version;
uint32_t last_comp_version;
uint32_t boot_cpuid_phys;
uint32_t size_dt_strings;
uint32_t size_dt_struct;
};
设备树解析可以参考/Documentation/devicetree/bindings/或者http://www.devicetree.org/specifications/或者/Documentation/devicetree/usage-modle.txt
也可以参考:
http://blog.youkuaiyun.com/21cnbao/article/details/8457546