BeagleBone Black linux4.14-ti内核启用Device Tree Overlay失效求助
你遇到的DTBO不生效问题由引脚冲突直接导致,对应报错如下:
[ 0.717426] pinctrl-single 44e10800.pinmux: pin PIN13 already requested by ocp:helper; cannot claim for ocp:P8_11_pinmux
[ 0.728435] pinctrl-single 44e10800.pinmux: pin-13 (ocp:P8_11_pinmux) status -22
[ 0.736399] pinctrl-single 44e10800.pinmux: could not request pin 13 (PIN13) from group pinmux_P8_11_default_pin on device pinctrl-single
[ 0.750487] bone-pinmux-helper ocp:P8_11_pinmux: Error applying setting, reverse things back
修复步骤
1. 解决引脚冲突
- 你当前的overlay仅在
fragment@0中禁用了P9系列10个引脚的pinmux助手,但冲突的是P8_11引脚,需在fragment@0中新增P8_11_pinmux { status = "disabled"; };规则释放该引脚 - 你当前
exclusive-use字段仅声明了P9系列引脚,需将所有用到的引脚(包括P8_11)全部加入该字段,确保cape管理器预留对应资源 - 编辑
/boot/uEnv.txt,添加默认cape禁用规则,关闭占用引脚的默认功能:cape_enable=bone_capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN,BB-ADC
2. 修正overlay加载配置
- 4.14-rt内核的BeagleBone Black不推荐运行时加载overlay,需在uboot阶段指定加载:编辑
/boot/uEnv.txt,找到uboot_overlay_addrX的行(X可以是0-4任意未使用的序号),修改为:
取消该行注释,保存后重启生效。uboot_overlay_addr4=/lib/firmware/GPIO_Overlays-00A0.dtbo
3. 修复overlay语法缺陷
- 你当前
fragment@3中声明了compatible = "gpio-keys",但未定义任何gpio-key子节点,内核会直接跳过该节点的pinctrl配置。如果你仅需要将引脚配置为通用GPIO,将fragment@3替换为如下内容即可:fragment@3{ target = <&ocp>; __overlay__{ custom_gpio_pins { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&GPIO_Overlays>; }; }; };
4. 编译与验证
- 使用带警告过滤的编译命令,避免不必要的报错中断编译:
dtc -I dts -O dtb -o /lib/firmware/GPIO_Overlays-00A0.dtbo -b 0 -@ -Wno-unit_address_vs_reg /lib/firmware/GPIO_Overlays-00A0.dts - 重启后执行
dmesg | grep -i overlay确认overlay加载成功,执行cat /sys/kernel/debug/pinctrl/44e10800.pinmux/pins | grep 13查看PIN13的配置是否符合预期。
内容的提问来源于stack exchange,提问作者Mert
相关产品推荐
相关产品推荐

