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>; }; };
后续操作注意事项
- 正确编译dtbo:使用与kirkstone版本匹配的
dtc工具编译,命令如下:dtc -I dts -O dtbo -o gpio_overlay.dtbo gpio_overlay.dts - 避免资源冲突:检查
/boot/config.txt中是否有其他占用GPIO17的配置(如其他overlay、gpio=参数),确保资源唯一。 - Yocto集成建议:基于meta-raspberrypi构建时,建议将overlay集成到Yocto配方中,而非手动复制:
- 在自定义layer创建
recipes-kernel/device-tree-overlays目录 - 编写
gpio-overlay.bb配方,指定dts源文件和安装路径 - 在
local.conf中添加IMAGE_INSTALL:append = " gpio-overlay"
- 在自定义layer创建
内容的提问来源于stack exchange,提问作者danrudn
相关产品推荐
相关产品推荐

