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

Zephyr RTOS中PWM设备树叠加层pinctrl-names编译错误解决咨询

解决Zephyr RTOS中设备树叠加层pinctrl-names不匹配的问题

问题根源

Zephyr的pinctrl子系统要求pinctrl-names数组的元素数量,必须与设备节点下pinctrl-<n>(n从0开始)的数量完全一致。你遇到的错误是因为原库自带.dts中只定义了1个pinctrl-names字符串(对应pinctrl-0),但叠加层新增了pinctrl-1却没有更新pinctrl-names,导致数量不匹配。

解决方案

方案1:保留原有pinctrl配置,新增自定义配置

如果需要同时保留原dts中的pinctrl-0配置,只需在叠加层中更新pinctrl-names,将原有名字和新增的状态名一起写入:

假设原dts片段:

pwm@40050000 {
    pinctrl-0 = <&pwm0_default>;
    pinctrl-names = "default";
};

你的叠加层应修改为:

// 定义自定义引脚配置节点
&pinctrl {
    pwm0_custom: pwm0-custom {
        pinmux = </* 填写你的引脚复用值 */>;
        // 可选:添加引脚属性,比如上拉、驱动强度等
        bias-pull-up;
        drive-strength = <2>;
    };
};

// 更新PWM设备节点
&pwm@40050000 {
    pinctrl-1 = <&pwm0_custom>;
    // 合并原有名字和新增名字,数量匹配pinctrl-0和pinctrl-1
    pinctrl-names = "default", "custom";
};

方案2:替换原有pinctrl配置(不再需要原配置)

如果不需要原dts中的pinctrl-0,可以先删除原属性,再重新定义pinctrl-0和对应的pinctrl-names:

&pinctrl {
    pwm0_custom: pwm0-custom {
        pinmux = </* 填写你的引脚复用值 */>;
        bias-pull-up;
        drive-strength = <2>;
    };
};

&pwm@40050000 {
    // 删除原有的pinctrl-0属性
    /delete-property/ pinctrl-0;
    // 重新定义pinctrl-0为自定义配置
    pinctrl-0 = <&pwm0_custom>;
    // 此时pinctrl-names只需1个字符串,与pinctrl-0数量匹配
    pinctrl-names = "default";
};

关键注意事项

  • 必须保证pinctrl-names的元素数量 = 设备节点下pinctrl-<n>的最大索引值 + 1。
  • 原dts中pinctrl-names的原有名字(比如示例中的"default")要准确对应,不能随意修改,除非你确定原配置的状态名。

内容的提问来源于stack exchange,提问作者j-leo7

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:47:38