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

PC/104(Ubuntu16.04)GPIO10、17突然无法工作报I/O错误如何解决

问题原因

内核日志输出的invalid GPIO 10、invalid GPIO 17错误,明确说明当前系统无法识别这两个GPIO编号,可能的原因如下:

  • 硬件异常:你的dmesg日志中已经存在ehci-pci端口复位错误、pcan硬件打开失败的底层硬件报错,说明PC/104主板的硬件可能出现接触不良、sch311x GPIO控制器损坏等问题,导致驱动无法识别到硬件控制器,进而无法识别对应的GPIO编号。
  • 驱动加载异常:gpio_sch311x驱动虽然执行了加载命令,但实际并未正确匹配到硬件,导致该控制器对应的GPIO编号范围未被系统注册,10、17两个编号不在系统可用GPIO范围内。
  • GPIO编号被占用:10、17两个GPIO编号已经被其他内核模块或系统服务预占用,无法再被用户态通过sysfs导出。
解决步骤

1. 排查驱动加载状态

  • 执行lsmod | grep gpio_sch311x确认驱动是否正常加载,若无输出,重新加载驱动并查看加载日志:
    sudo modprobe -r gpio_sch311x
    sudo modprobe gpio_sch311x
    dmesg | tail
    
    若加载过程出现硬件相关报错,优先排查硬件问题。
  • 确认可用GPIO范围:执行以下命令查看sch311x控制器对应的GPIO编号范围,确认10、17是否在可用范围内:
    # 找到sch311x对应的gpiochip节点
    cat /sys/class/gpio/gpiochip*/label
    # 替换X为上一步查到的sch311x对应gpiochip的编号,查看起始编号
    cat /sys/class/gpio/gpiochipX/base
    # 查看该控制器支持的GPIO数量
    cat /sys/class/gpio/gpiochipX/ngpio
    
    如果确认10、17不在可用范围内,就是控制器未被正确识别或者GPIO编号发生了偏移。

2. 排查硬件故障

  • 先对整个PC/104设备断电重启,检查GPIO引脚的物理连接是否松动,排查是否有硬件损坏、进水、引脚短路等情况。
  • 重启后若dmesg中的ehci-pci、pcan相关报错依然存在,基本可以确定是主板硬件故障,需要更换或者维修硬件。

3. 修复执行脚本

如果确认是GPIO编号发生偏移,找到正确的编号后替换脚本中的10、17即可,也可以在脚本中增加异常校验逻辑,避免导出失败后继续执行后续命令:

#!/bin/bash
for gpio_id in 10 17; do
  if ! echo ${gpio_id} > /sys/class/gpio/export; then
    echo "GPIO ${gpio_id} 导出失败,退出执行"
    exit 1
  fi
  echo out > /sys/class/gpio/gpio${gpio_id}/direction
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:24:02