1.名词:
dt
dts
dtsi
dtb
dtc
将DTB反编译成dts,dtc -I dtb -O dts -o ABC.dts arch/arm/boot/ABC.dtb
同名节点的处理策略:将内容做集合,名字用最后的那个节点名字。
2.基本语法
1)dts文件以/做为根节点开始,{};之中包含子节点和属性,子节点还可以包含子节点和属性
2)不同级的节点内可有有相同的节点名和属性名
3)结束标志:节点结束符{}后必须以“;”号结束,节点属性值必须以“;”号结束
4)支持C风格/*...*/和C++风格“//...”注释
5)dts文件本身中可以通过#include包含其他.dtsi文件和.h文件
6).dtsi文件本身也可以通过#include包含其他.dtsi和.h
7)DT规范中没有规定节点名和属性的含义
8)DT应用于Linux内核驱动这类特定的场景下,某些节点和属性有特定意义(约定俗成)
9)不论.dts还是.dtsi文件都可以定义节点,并且都是在“/”根节点之下,最终在编译生成.dtb文件时合并成一个根节点
3.特殊节点
1)根节点
2)aliases节点 - 节点别名,节点标签
3)chosen节点 - 启动参数
4)memory节点 - 内存布局,
4.标准熟悉
model
根的compatible,内核要解析的,表示一个板子
cpu的compatible
设备节点的compatible,会和驱动里的compatible比较匹配
二级节点 -- 平台设备, platf_driver.driver.of_match_table.compatible
三级节点 -- i2c spi
phandle
status -- 决定这个设备是否可以工作, “okay”“disabled”“fail”“fail-sss”
reg=
address-cells - 0,1,2表示几个32bit单元表示地址,决定他的子节点
size-cells - 0,1,2表示几个32bit单元表示size大小
device-type
range -- 父子空间的映射
中断 -- interrupt-controller, interrupt-cells, interrupt-parent
gpio属性
5.DT的用途:
1)平台识别 compatible,来识别是否是自己的支持的平台
2)运行时配置
3)设备植入
6. API -- dt读到的都是大端模式
of_find_node_by_path("path")
of_find_node_by_name(start_node, name)
of_find_node_by_type() -- for cpu
of_find_property(node, name, len)
of_get_property()
of_property_read_u8/16/32