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

Raspberry Pi 4 GPIO驱动probe失败:gpiod_get_index调用报错排查

问题原因分析及解决方法

错误码-2对应ENOENT(资源不存在),核心原因是你的DeviceTree属性命名和gpiod_get_index的预期不匹配,具体细节如下:

1. 内核GPIO子系统的属性命名规则

内核GPIO子系统对单引脚和多引脚属性有明确的命名规范:

  • 单个GPIO引脚:使用单数形式属性,如xxx-gpio,对应驱动中gpiod_get()调用
  • GPIO引脚数组:使用复数形式属性,如xxx-gpios(末尾带s),对应驱动中gpiod_get_index()调用

你当前DTS中定义的是led-gpio(单数),即使在里面写了两个引脚,内核也不会将其识别为GPIO数组,gpiod_get_index()会因为找不到预期的复数形式属性而返回-2错误。

2. 验证佐证

你拆分出led-blue-gpio和led-red-gpio(均为单数单引脚属性)后,用gpiod_get()能正常工作,完全符合上述规则——单数属性对应单引脚的gpiod_get()调用,复数属性才对应数组的gpiod_get_index()调用。

3. 修复方法

修改你的DTS文件,将属性名改为复数形式led-gpios,并确保引脚数组格式正确:

led-gpios = <&gpio 17 GPIO_ACTIVE_HIGH>, <&gpio 27 GPIO_ACTIVE_HIGH>;

驱动中保持gpiod_get_index()调用不变,指定索引0和1分别获取两个LED引脚即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 18:04:56