@设备树
这段设备树源代码(DTS)片段描述了一个具有中断控制器和PCI(外围组件互连)总线的片上系统(SoC)。
仅供学习,欢迎指正
一、SoC节点
soc { compatible = "simple-bus"; #address-cells = <1>; #size-cells = <1>;
1.1 soc
- 这是SoC的顶级节点,在本例中它代表一个简单的总线。
1.2 compatible = “simple-bus”;
- 表示此节点与简单总线总线类型兼容。这有助于内核理解如何与总线交互。
1.3 #address-cells = <1>;
- 指定地址单元格(用于定义地址)的宽度为1个单元格。这适用于此总线下的子节点。
#单元格大小=<1>;:
指定大小单元格(用于定义内存区域的大小)为1个单元格宽。
二、中断控制器节点
open-pic { clock-frequency = <0>; interrupt-controller; #address-cells = <0>; #interrupt-cells = <2>; };
2.1 open-pic
表示一个名为open pic的中断控制器。此节点管理系统的中断。
2.2 clock-frequency = <0>
指定中断控制器的时钟频率。这里它被设置为0,这可能是一个占位符,也可能表示没有特定的频率。
2.3 interrupt-controller
将此节点标记为中断控制器。此属性有助于内核识别它负责管理中断。
2.4 #address-cells = <0>
指定中断控制器的地址单元为0。这表示中断控制器不使用地址单元进行配置。
2.5 #interrupt-cells = <2>
指定此中断控制器的中断单元宽度为2个单元。这定义了设备树中描述中断的格式。
三、PCI Node
pci { #interrupt-cells = <1>; #size-cells = <2>; #address-cells = <3>; interrupt-map-mask = <0xf800 0 0 7>; interrupt-map = < /* IDSEL 0x11 - PCI slot 1 */ 0x8800 0 0 1 &open-pic 2 1 /* INTA */ 0x8800 0 0 2 &open-pic 3 1 /* INTB */ 0x8800 0 0 3 &open-pic 4 1 /* INTC */ 0x8800 0 0 4 &open-pic 1 1 /* INTD */ /* IDSEL 0x12 - PCI slot 2 */ 0x9000 0 0 1 &open-pic 3 1 /* INTA */ 0x9000 0 0 2 &open-pic 4 1 /* INTB */ 0x9000 0 0 3 &open-pic 1 1 /* INTC */ 0x9000 0 0 4 &open-pic 2 1 /* INTD */ >; };
3.1 pci
表示系统中的PCI总线。它是soc节点的子节点,管理PCI设备及其中断。
3.2 #interrupt-cells = <1>;
指定PCI总线的中断单元宽度为1个单元。这定义了如何描述此总线上设备的中断。
3.3 #size-cells = <2>
指定此总线上内存区域的大小单元为2个单元宽。
3.4 #address-cells = <3>
指定PCI总线的地址单元宽度为3个单元。
3.5 interrupt-map-mask = <0xf800 0 0 7>
定义用于将中断从PCI设备映射到中断控制器的掩码。此掩码有助于正确匹配和路由PCI中断。
3.6 interrupt-map = <…>
此属性提供PCI中断到中断控制器的映射。它描述了PCI中断应该如何路由:
3.6.1 格式
[PCI总线地址][设备][功能][引脚][控制器][中断号][触发类型]
- PCI总线地址:指定PCI总线上的地址。
- device:指定PCI设备。
- function:指定PCI设备中的函数。
- pin:指定中断引脚(例如INTA、INTB等)。
- 控制器:引用中断控制器节点(在本例中为&open-pic)。
- 中断号:指定中断行号。
- 触发器类型:指定中断的类型(级别或边缘)。
3.6.2 示例:
- 0x8800 0 1&open-pic 2 1:
- PCI地址0x8800,设备0,功能0,中断引脚1(INTA),映射到打开的pic,中断编号2,触发类型1。
- 0x9000 0 0 1&open-pic 3 1:
- PCI地址0x9000,设备0,功能0,中断引脚1(INTA),映射到打开的pic,中断编号3,触发类型1。
四、总结
- SoC节点:定义片上系统的基本属性。
- 中断控制器(open pic):管理中断,没有自己的中断或中断父属性,使其成为中断树的根。
- PCI节点:管理PCI设备,并提供中断映射,指定PCI中断如何路由到开放式pic中断控制器。
五、特别说明
#interrupt-cells,指定中断源的信息 cells 个数。
interrupt-controller,表示当前节点为中断控制器。
interrupts,指定中断号,触发方式等。
interrupt-parent,指定父中断,也就是中断控制器。