最近项目上需要用到 LED 子系统,在嵌入式 Linux 里面点个灯还是比较简单的,只要在某个灯对应的目录里,向相应文件写入特定值,就可以让 LED 亮/灭/闪烁。
# echo 1 > /sys/class/leds/green/brightness // 点亮 LED # echo 0 > /sys/class/leds/green/brightness // 熄灭 LED # echo heartbeat > /sys/class/leds/green/trigger // 让 LED 像心跳一样闪烁
led trigger 当然,项目里用到的点灯功能要比上面介绍的稍微复杂一点,类似于硬盘灯,即对硬盘进行读写操作时,LED 会闪烁。 隐隐约约感觉到,这个功能应该和 trigger 文件有关系,因为在 cat 这个文件时,里面有 mmc0 这个字眼。 那就往 trigger 里面写个 mmc0 看看会有什么效果呢
# echo mmc0 > /sys/class/leds/green/trigger # cat /sys/class/leds/green/trigger none rc-feedback kbd-scrolllock kbd-numlock kbd-capslock kbd-kanalock kbd-shiftlock kbd-altgrlock kbd-ctrllock kbd-altlock kbd-shiftllock kbd-shiftrlock kbd-ctrlllock kbd-ctrlrlock [mmc0] heartbeat default-on ir-power-click axp20x-usb-online
向磁盘中写入数据 # touch aa | sync 1 神奇地发现,每执行一次命令向磁盘中写入数据,板子上绿色的灯就会闪烁一次,神奇。 通过查阅资料,了解到这是 LED 触发器相关的功能。一时间,想到
为什么往 tigger 里写入 mmc0,就能让 LED 变成硬盘灯?
为什么往 brightness 文件里写入 1/0,就能控制灯的亮灭?
为什么往 trigger 文件里面写入 timer,LED 就会闪烁,同时会产生两个文件 delay_on、delay_off,并能用它们控制灯的闪烁频率?
等等