You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何设备树GIC的#interrupt-cells为3时串口节点interrupts仅1个值

问题解答

你看到的串口节点interrupts仅1个cell,核心原因是这些串口节点不属于根节点的GIC中断域,而是属于上层母板总线节点的中断域,具体规则如下:

  • 设备树中每个节点的interrupts属性的cell数量,由它所属中断域的中断控制器/中断映射节点的#interrupt-cells决定,而非全局根节点的interrupt-parent对应的控制器参数。
  • 你引用的rtsm_ve-motherboard.dtsi中,所有串口外设都挂载在motherboard(vexpress母板总线)子节点下,这个母板总线节点本身配置了#interrupt-cells = <1>,同时通过interrupt-map属性将母板内部的1位中断号,自动映射到根节点GIC的3位中断描述符。

你可以翻阅同一份rtsm_ve-motherboard.dtsi的母板根节点配置,能找到类似以下代码验证:

motherboard {
    compatible = "arm,vexpress,v2m-p1", "simple-bus";
    #address-cells = <2>;
    #size-cells = <1>;
    ranges = <0 0 0 0x08000000 0x04000000>;
    #interrupt-cells = <1>; // 子节点interrupts仅需1个cell,即母板内部中断号
    interrupt-map-mask = <0 0 63>;
    interrupt-map = <0 0 0 &gic GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>,
                    <0 0 1 &gic GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>,
                    <0 0 2 &gic GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>,
                    <0 0 3 &gic GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>,
                    <0 0 4 &gic GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>,
                    <0 0 5 &gic GIC_SPI 43 IRQ_TYPE_LEVEL_HIGH>, // 对应serial0的<5>,映射为SPI 43
                    <0 0 6 &gic GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>; // 对应serial1的<6>,映射为SPI 44
};
  • 这里的interrupt-map已经预定义了母板内部中断号和GIC侧中断参数的对应关系,触发方式、中断类型都做了统一声明,所以子节点只需要填写母板内部的中断序号即可,不需要重复写GIC的三个参数。
  • 这种设计是为了提升dts复用性:不同的核心板搭配同一款母板时,只需要修改母板节点的interrupt-map映射关系,不需要批量修改所有外设节点的interrupts属性。

内容的提问来源于stack exchange,提问作者Chan Kim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 01:36:01