1. dts和dtsi完成的功能
1 uart5: serial@021f4000 {
2 compatible = "fsl,imx6sx-uart",
3 "fsl,imx6q-uart", "fsl,imx21-uart";
4 reg = <0x021f4000 0x4000>;
5 interrupts = ;
6 clocks = ,
7 ;
8 clock-names = "ipg", "per";
9 dmas = , ;
10 dma-names = "rx", "tx";
11 status = "disabled";
12 };
以上这段代码更多出现在*.dtsi中
一般会在*.dtsi中将芯片的外设接口资源都做定义,
如uart5作为该外设的label,node-name@unit-address作为设备的名称,node-name只是设备类型,uart1/uart2/uart3等可以都是serial名称,而@后面则跟着设备寄存器起始地址。
compatible默认属性,
reg寄存器地址和长度,该uart5节点的父节点为aips2,在父节点中指明#address-cells = <1>;#size-cells = <1>;这决定了子节点字段长度address为1, length为1. 所以reg格式为reg = <0x021f4000 0x4000>;
interrupts对应的中断号和中断出发方式,uart5的父节点为aips2,而aips2的父节点为soc,soc节点定义了interrupt-parent = ;给出了节点所依附的中断控制器,如果节点没有指定interrupt-parent,那么就从父节点继承,所以该uart5节点继承了soc的中断控制器,即intc. 而intc节点的#interrupt-cells = <3>;所以就有了该节点中interrupts = ;三个字段,具体这三个字段的含义可以参考芯片文档的描述。其中GIC_SPI定义在include/dt-bindings/interrupt-controller/arm-gic.h值为0,
clock外设时钟,在include/dt-bindings