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

Orange Pi One中PC系列引脚gpio_to_irq返回-22问题求助

解决Orange Pi One非PA系列GPIO引脚gpio_to_irq返回-22的问题

问题分析

从你提供的信息来看,仅PA系列(GPIO0-21)能通过gpio_to_irq()获取有效中断号,PC3(GPIO67)等其他组引脚返回-22(EINVAL),且/sys/kernel/debug/gpio中PC3未标记IRQ,但用户空间可正常作为GPIO使用。核心原因是这些非PA引脚的中断映射未在设备树或内核驱动中正确配置,导致内核无法将GPIO编号映射到对应的硬件中断线。

解决步骤

1. 检查设备树引脚配置

Orange Pi One基于Allwinner H3芯片,需查看对应设备树文件(通常为sun8i-h3-orangepi-one.dts或其引用的dtsi文件)中PC3引脚的配置:

  • 确认PC3节点是否包含中断相关属性,参考PA系列引脚的配置格式:
    &pio {
      pc3_pin: pc3 {
        pins = "PC3";
        function = "gpio_in";
        interrupt-parent = <&pio>;
        interrupts = <GPC 3 IRQ_TYPE_EDGE_FALLING>;
        bias-pull-up;
      };
    };
    
  • 确保interrupt-parent指向正确的GPIO中断控制器,interrupts属性格式符合Allwinner H3规范(组编号+引脚编号+触发类型)。

2. 验证内核中断控制器配置

  • 检查内核是否开启Allwinner GPIO中断支持:
    zcat /proc/config.gz | grep CONFIG_SUNXI_IRQ
    
    确保输出为CONFIG_SUNXI_IRQ=y,若未开启需重新编译内核并启用该选项。
  • 查看内核日志确认PC组GPIO中断初始化状态:
    dmesg | grep -i "gpio.*pc"
    
    若未找到PC组中断注册的日志,说明内核未正确枚举该组的中断控制器。

3. 用户空间临时验证中断可用性

先在用户空间尝试配置中断,确认硬件本身支持:

# 若未导出GPIO67,先执行导出
echo 67 > /sys/class/gpio/export
# 配置下降沿触发中断
echo "falling" > /sys/class/gpio/gpio67/edge
# 检查配置是否成功
cat /sys/class/gpio/gpio67/edge

如果配置成功,说明硬件支持中断,问题出在内核驱动的映射逻辑;若失败,需先解决设备树或内核配置问题。

4. 驱动中直接使用硬件中断号(临时绕过方法)

若知道PC3对应的硬件中断号,可直接跳过gpio_to_irq()调用:

  • 通过cat /proc/interrupts查找PC组对应的中断号,Allwinner H3中PC组的中断起始编号通常为64(PA组0-31,PB组32-63,PC组64-95),因此PC3的硬件中断号可尝试64+3=67(需以实际输出为准)。
  • 修改驱动代码:
    // 替换gpio_to_irq调用,直接使用硬件中断号
    int gpio_irq = 67; // 根据/proc/interrupts结果调整
    ret = request_irq(gpio_irq, sample_irq, IRQF_TRIGGER_FALLING, "flow_sensor", 0);
    

5. 重新编译设备树/内核

  • 若修改了设备树,编译后替换到SD卡的/boot/dtbs/目录下对应文件;
  • 若修改了内核配置,重新编译内核并替换镜像文件,重启后验证。

额外注意事项

  • 确认PC3引脚未被其他设备占用(从debug/gpio输出看,当前仅被你的驱动占用,无冲突);
  • 优先使用devm_gpio_request_one()等内核资源管理API,避免手动资源泄漏;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 06:50:24