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

RaspberryPi3B+添加Device Tree Overlay报错:Unable to merge overlay: err:11

Raspberry Pi 3B+ 设备树Overlay加载报错 err:11 解决方法

启动设备时出现设备树Overlay合并错误:Unable to merge overlay: err:11,错误信息可在/sys/firmware/device-tree路径下查看。你使用的设备树源文件gpio_overlay.dts内容如下:

/dts-v1/;
/plugin/;

#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/gpio/gpio.h>

/* Overlay for configuring the gpio pins */

/{
    compatible = "brcm,bcm2835";

    fragment@0 {
        target = "/";
        __overlay__ {
            input_sensor_line1: input_sensor_line1 {
                compatible = "input_sensor,sensor_line1";
                interrupts = <17 IRQ_TYPE_EDGE_BOTH>;
                interrupt-parent = <&gpio>;
                input_line1-gpios = <&gpio 17 GPIO_PULL_DOWN>;
                status = "okay";
            };
        };
    };
};

已在/boot/config.txt中配置dtoverlay=gpio_overlay,并将编译后的gpio_overlay.dtbo复制到/boot/overlays目录,系统基于meta-raspberrypi kirkstone版本构建。

问题根源

错误码err:11对应Linux系统的EINVAL(无效参数),结合你的配置,主要问题有三点:

  • 根节点兼容属性不匹配:Raspberry Pi 3B+搭载BCM2837芯片,而你在overlay根节点指定了compatible = "brcm,bcm2835";,与目标系统根节点的兼容属性不符,导致合并被拒绝。
  • GPIO配置不符合规范:同一个GPIO(17号)同时通过interrupts和gpios声明,且直接在gpios属性中设置下拉电阻的方式不符合树莓派设备树规则——树莓派的GPIO上下拉、功能选择需通过pinctrl子系统配置。
  • Overlay结构冗余:针对根节点的fragment包裹完全多余,直接对&gpio节点进行扩展更简洁且符合规范。

修复后的设备树文件

/dts-v1/;
/plugin/;

#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/gpio/gpio.h>

/* Overlay for configuring the gpio pins */

&gpio {
    input_sensor_line1: input_sensor_line1 {
        compatible = "input_sensor,sensor_line1";
        interrupt-parent = <&gpio>;
        interrupts = <17 IRQ_TYPE_EDGE_BOTH>;
        input_line1-gpios = <&gpio 17 GPIO_ACTIVE_HIGH>;
        /* 通过pinctrl配置GPIO下拉与输入功能 */
        pinctrl-names = "default";
        pinctrl-0 = <&input_sensor_line1_pins>;
        status = "okay";
    };

    input_sensor_line1_pins: input-sensor-line1-pins {
        brcm,pins = <17>;
        brcm,function = <BCM2835_FSEL_GPIO_IN>;
        brcm,pull = <BCM2835_PULL_DOWN>;
    };
};

后续操作注意事项

  1. 正确编译dtbo:使用与kirkstone版本匹配的dtc工具编译,命令如下:
    dtc -I dts -O dtbo -o gpio_overlay.dtbo gpio_overlay.dts
    
  2. 避免资源冲突:检查/boot/config.txt中是否有其他占用GPIO17的配置(如其他overlay、gpio=参数),确保资源唯一。
  3. Yocto集成建议:基于meta-raspberrypi构建时,建议将overlay集成到Yocto配方中,而非手动复制:
    • 在自定义layer创建recipes-kernel/device-tree-overlays目录
    • 编写gpio-overlay.bb配方,指定dts源文件和安装路径
    • 在local.conf中添加IMAGE_INSTALL:append = " gpio-overlay"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 08:17:38