【linux】【设备树】中断描述

@设备树

这段设备树源代码(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,指定父中断,也就是中断控制器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq2108462953

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值