GPIO 调试与常见问题
gpio_request或gpiod_get失败:检查该引脚是否已被其他设备占用。- 电平写入无变化:检查 pinmux 是否仍配置为 UART、PWM、SPI 等复用功能。
- 中断持续触发:核对触发极性、外部上下拉、电平保持时间及消抖配置。
- 休眠后电平异常:检查
default、sleepstate 以及电源域是否掉电。 - 驱动能力不足:核对
drive-strength与芯片手册允许范围,不要盲目设最大值。
dmesg | grep -Ei 'gpio|pinctrl|irq'
cat /proc/interrupts
mount -t debugfs none /sys/kernel/debug 2>/dev/null || true
cat /sys/kernel/debug/gpio
通用定位顺序
- 原理图与供电。
- 最终 DTB 中的节点和 pinctrl。
- 最终
.config与.ko。 - probe、clock、reset、IRQ 日志。
- 设备节点与 sysfs/debugfs。
- 最小功能测试。
- 压力、休眠和异常插拔测试。
不要通过关闭错误日志来判断问题已经解决。应找到第一个异常并验证其上下游依赖。