GPIO 驱动的 LED 由于操作简单和可视化即可以在板上直接看到其闪烁时长和频率,我们可以通过LED这种特性用于调试开发过程当中各种情景, 如统计某个中断出发频率,某些在linux 内核比较难以调试的环境, 比如休眠唤醒模式, soc各种低功耗模式等环境, 这样即使在普通串口打印不能正常工作的环境,我们也可以利用LED辅助这些环境下的调试。
0 GPIO LED 设备驱动分析
区分于keyboard的led驱动(由input 子设备管理),GPIO LEDS使用led-clas驱动框架, 用户空间通过/sys/class/leds/board-led/ 访问led的各种属性,其中max_brightness 代表最大亮度,brightness代表亮度, 复杂的led 系统支持delay_{on, off} 用来控制led交替闪烁哦的时长, trigger 用来触发led事件,例如开启关闭配置内核CONFIG
CONFIG_LEDS_GPIO=y
CONFIG_LEDS_TRIGGERS=y
1 重要数据结构
o 描述gpio led 设备结构
/* For the leds-gpio driver */
struct gpio_led {
const char *name; // 每个led的名字
const char *default_trigger; // 指定默认触发源
unsigned gpio; // 控制led 的io pin
unsigned active_low : 1; // low 时为off
unsigned retain_state_suspended : 1; // 休眠时是否保存状态,等到唤醒后恢复
unsigned default_s