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

设备树Overlay编译告警:是否需重复定义主DTS已存在属性?

设备树Overlay编译告警处理问题

问题背景

我正在为主设备树(DTS)中缺失的CSI设备节点编写设备树Overlay,该Overlay节点包含interrupts和reg属性。

主DTS简化片段

/ {
    interrupt-parent = <&gic>;
    #address-cells = <1>;
    #size-cells = <1>;
    
    //...
    
    soc {
        compatible = "simple-bus";
        #address-cells = <1>;
        #size-cells = <1>;
        ranges;
        
        //...
        
        gic: interrupt-controller@1c81000 {
            //...
        };
    };
};

我的Overlay片段

fragment@1 {
    target = <&soc>;
    __overlay__ {
        /* Do I need this? */ // #address-cells = <1>;;
        /* And this? */ // #size-cells = <1>;;

        csi: camera-csi@1cb0000 {
            compatible = "allwinner,sun6i-a31-csi";
            reg = <0x01cb0000 0x1000>;
            interrupts = <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>;
            clocks = <&ccu CLK_BUS_CSI>,
                <&ccu CLK_CSI_SCLK>,
                <&ccu CLK_DRAM_CSI>;
            clock-names = "bus", "mod", "ram";
            resets = <&ccu RST_BUS_CSI>;
            
            //...
        };
    };
};

编译告警信息

camera_overlay.dtso:37.17-43: Warning (reg_format): /fragment@1/__overlay__/camera-csi@1cb0000:reg: property has invalid length (8 bytes) (#address-cells == 2, #size-cells == 1)
camera_overlay.dtbo: Warning (pci_device_reg): Failed prerequisite 'reg_format'
camera_overlay.dtbo: Warning (pci_device_bus_num): Failed prerequisite 'reg_format'
camera_overlay.dtbo: Warning (simple_bus_reg): Failed prerequisite 'reg_format'
camera_overlay.dtbo: Warning (i2c_bus_reg): Failed prerequisite 'reg_format'
camera_overlay.dtbo: Warning (spi_bus_reg): Failed prerequisite 'reg_format'
camera_overlay.dtso:35.37-65.15: Warning (avoid_default_addr_size): /fragment@1/__overlay__/camera-csi@1cb0000: Relying on default #address-cells value
camera_overlay.dtso:35.37-65.15: Warning (avoid_default_addr_size): /fragment@1/__overlay__/camera-csi@1cb0000: Relying on default #size-cells value
camera_overlay.dtbo: Warning (avoid_unnecessary_addr_size): Failed prerequisite 'avoid_default_addr_size'
camera_overlay.dtbo: Warning (unique_unit_address): Failed prerequisite 'avoid_default_addr_size'
camera_overlay.dtso:35.37-65.15: Warning (interrupts_property): /fragment@1/__overlay__/camera-csi@1cb0000: Missing interrupt-parent

我的疑问:这些属性(#address-cells、#size-cells、interrupt-parent)已经在主DTS中定义,我能否安全忽略这些告警?还是必须在Overlay中重新声明?担心忽略后运行时CSI的中断等功能无法正常工作。


解答

1. 不能直接忽略这些告警

这些告警是dtc(设备树编译器)单独编译Overlay时,无法感知主DTS上下文导致的。虽然主DTS里已有相关属性,但Overlay编译时是独立检查语法格式的,直接忽略可能导致运行时CSI设备功能异常(比如地址解析错误、中断路由失败)。

2. 正确的处理方式

(1)解决reg_format和avoid_default_addr_size告警

在Overlay的__overlay__块中,显式声明与主DTS一致的#address-cells和#size-cells,给dtc提供编译时的上下文:

fragment@1 {
    target = <&soc>;
    __overlay__ {
        #address-cells = <1>;
        #size-cells = <1>;

        csi: camera-csi@1cb0000 {
            // 原有属性保持不变
        };
    };
};

不用担心重复定义,Overlay加载时会复用主DTS的已有属性值,不会产生冲突,这只是为了满足编译检查的要求。

(2)解决interrupts_property告警

在CSI节点中显式添加与主DTS一致的interrupt-parent属性:

csi: camera-csi@1cb0000 {
    compatible = "allwinner,sun6i-a31-csi";
    reg = <0x01cb0000 0x1000>;
    interrupt-parent = <&gic>; // 新增该行
    interrupts = <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>;
    // 其他属性保持不变
};

虽然主DTS根节点已设置全局interrupt-parent,但dtc编译Overlay时无法继承该上下文,显式声明可消除告警,同时保证运行时中断路由的正确性。

3. 核心原因

  • dtc编译Overlay时独立于主DTS,必须在Overlay内提供足够上下文来验证属性格式合法性。
  • 显式声明这些属性不会影响运行时功能,Overlay加载时会优先匹配主DTS的已有配置,不会产生冲突。
  • 若不处理告警,可能出现reg属性解析错误、中断无法正确路由到GIC等问题,导致CSI设备无法正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 17:46:01