设备树 interrupt-controller声明某个节点是一个中断控制器

interrupt-controller 是设备树(Device Tree)中用于声明某个节点是一个中断控制器的关键属性。以下是中文分步解释:


1. 核心作用

  • 当一个节点(如GIC、PIC)被标记为 interrupt-controller 时,表示:
    • 该节点是一个中断控制器,能够接收、管理和路由来自其他设备的中断信号。
    • 其他设备可通过 interrupt-parent 属性指向它,以声明自己的中断由该控制器处理。

2. 属性语法

在设备树中,通过以下方式声明一个中断控制器:

interrupt_controller: interrupt-controller@<地址> {
    compatible = "arm,gic-v3";  // 示例:兼容ARM GICv3控制器
    reg = <0x0 0x8000000 0x0 0x10000>;  // 寄存器地址范围
    interrupt-controller;       // 声明该节点是中断控制器
    #interrupt-cells = <3>;      // 指定中断号格式(如:控制器编号、中断号、触发方式)
};

3. 关键子属性

  • #interrupt-cells
    定义中断号的格式,其他设备引用中断时需按此格式提供参数。例如:
    • #interrupt-cells = <3> 表示中断号由3个参数组成(如 GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH)。

4. 典型场景

假设系统中有以下硬件结构:

CPU
└── GIC(顶级中断控制器)
    └── GPIO中断控制器(子控制器)
        └── GPIO设备
  • GIC节点

    gic: interrupt-controller@8000000 {
        compatible = "arm,gic-v3";
        interrupt-controller;
        #interrupt-cells = <3>;
    };
  • GPIO中断控制器节点

    gpio-ic: interrupt-controller@9000000 {
        compatible = "my-gpio-ic";
        interrupt-controller;
        #interrupt-cells = <2>;
        interrupt-parent = <&gic>;  // 声明上级控制器是GIC
    };
  • GPIO设备节点

    gpio: gpio@9010000 {
        interrupt-parent = <&gpio-ic>;  // 指向子控制器
        interrupts = <0 8>;             // 中断号格式由#interrupt-cells=2定义
    };

5. 与 interrupt-parent 的关系

  • interrupt-controller:声明自身是控制器。
  • interrupt-parent:其他设备指向控制器的指针。
  • 例如,GPIO设备的 interrupt-parent 指向 gpio-ic,而 gpio-ic 的 interrupt-parent 指向 gic,形成中断路由链。

6. 实际应用

  • 在ARM平台中,GIC通常作为顶级中断控制器,子控制器(如GPIO、UART)通过 interrupt-parent 连接到它。
  • 正确配置 interrupt-controller 和 #interrupt-cells 可确保内核正确解析中断信号,避免路由错误。

通过 interrupt-controller,设备树能够清晰描述中断控制器的层级结构,确保硬件中断被正确路由和处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值