一、核心本质
同一个物理 GPIO 引脚,在设备树里被两个及以上驱动 / 模块同时申请、配置、使用。
二、直接出现的问题
1. 驱动注册失败、内核报错
- 先加载的驱动成功占用 GPIO,后加载驱动调用
gpiod_get()/gpio_request()直接失败
- 打印
gpio already requested,模块初始化直接挂掉,功能失效
2. 电平互相篡改,逻辑完全错乱
- A 模块拉高电平,B 模块误以为是自身触发信号
- 按键、中断、指示灯、使能脚、复位脚互相干扰
- 按键乱触发、指示灯乱闪、外设随机启停
3. 方向模式冲突(输入 / 输出打架)
- 一个配为输出推高低电平
- 另一个配为输入检测电平
- 输出强拉电平,输入采样永远不准;甚至 IO 口电平僵持,灌电流异常
4. 中断冲突最严重
- 双方都配置该 GPIO 为中断触发(上升沿 / 下降沿 / 双边沿)
- 中断号重复注册,内核中断紊乱、丢失中断、频繁误触发
- 严重直接系统卡顿、死机、内核 panic
5. 电气硬件损坏风险
- 两个模块同时设为输出:一个拉高、一个拉低 → IO 口对拉灌大电流
- 长期使用烧毁 GPIO 引脚、主控 IO 域电路
6. 休眠 / 唤醒逻辑异常
- 休眠时一方拉电平唤醒,另一方误唤醒整机
- 低功耗失效,待机功耗飙升
7. 设备树编译 & 合并隐性冲突
- 多个 dts/dtsi 重复定义
gpios = <&gpioxxx ...>
- 覆盖原有配置,实际生效的只有最后一个配置,前期配置全部失效
三、常见冲突场景
- 按键 GPIO 同时被按键驱动 + 唤醒驱动使用
- 电源使能脚 同时被功耗管理 + 外设驱动配置
- LED 指示灯 被两个业务模块控制
- 串口 / 外设复位脚 多模块共用复位控制
- 外部中断输入脚 多个传感器共用同一中断 IO