linux dts 设备树的理解与使用
文档:Documentation/devicetree/bindings 目录下
以前是platform的C语言使用,现在改为用dts的命令交互式的文件指定方式。
采用dts的方式进行替换platfrom,避免代码的冗余处理, 硬件的表现是采用主芯片-总线-控制器的这种方式,dts描述也是这样描述方法
1、dts的分类及具体命令使用
a、 根节点兼容性
根节点是采用compatible="",
兼容属性一般包括两个或两个以上的兼容性字符串,首个兼容性字符串是板子级别,后面一个兼容性字符串是芯片级别。
譬如板子arch/arm/boot/dts/vexpress-v2p-ca9.dts,
.compatible="arm, vexpress, v2p-ca9","arm,vexpress"。
b、 设备节点兼容性
用于驱动和设备的绑定,兼容属性是一个字符串列表,列表中的第一个字符串表征了节点设备的确切设备,形式为:<manufacturer>,<model>,其后的字符串的表征可以兼容其它设备
c、设备节点及label命名
设备节点:遵循的组织形式为<name>[@<unit-address>],也可以为一个设备节点添加label, 之后可以通过&label的形式进行访问,这种引用是通过phandle进行。例:
gpio:gpio@48000000 {
}
d、地址编码
address-cells, size-cells, 这个暂时不太清楚使用,后面进行优化处理,size-cells 理解为地址长度, address-cells为地址, 比如 address-cells=1, 表示只用一个地址表示开始地址, address-cells, 需要两个reg<0,0,12>, 这两个0作为才能做起始地址
e、中断连接
f、GPIO、时钟、pinmux连接
2、常用的函数
a、寻找节点
of_find_compatible_node();
b、读取属性
c、内存映射
d、解析中断 irq_of_parse_and_map();
3、dts从uboot到传递及编译方式
a、.