Linux GPIO Driver (gpiod)¶
1. GPIO Architecture¶
User space ↓ /dev/mygpio (char driver) ↓ Kernel driver ↓ gpiod API ↓ GPIO controller ↓ Hardware
2. Legacy vs gpiod¶
Legacy API (deprecated)¶
Problems: - Not DT-friendly - Platform dependent - Hard to maintain
gpiod API (modern)¶
3. Device Tree Binding¶
Driver:
4. Platform Driver Binding¶
DT: compatible = "myvendor,mygpio-led"
Driver: .of_match_table
5. Descriptor-based Design¶
- No global GPIO number
- Use logical names ("led")
6. devm_ Resource Management¶
- Auto cleanup on driver remove
- No manual free needed
7. Common Pitfalls¶
- GPIO number ≠ BCM number (Raspberry Pi)
- dtoverlay reload may leave stale state
- dmesg | tail can mislead debugging
- need EOF handling in read()