[Radxa Rock]控制开发板的LED灯

Radxa Rock主板上提供了三个LED灯,分别是蓝绿红,在Ubuntu和Andriod中,可以通过/sys/class/leds/颜色/trigger来控制。Linux内核文档https://www.kernel.org/doc/Documentation/leds/leds-class.txt提供了关于led的相关说明,通过执行

cat /sys/class/leds/red/trigger

可以看到提供的控制命令,我们只需要写入信息到trigger就可以控制Led的开关及动作。

下面简单翻译下leds-class原文:

Linux下LED控制
==============

如果你想控制键盘LED,它们被输入子系统控制而不需要Led类。

LED类允许从用户空间通过简单的方式控制LED。LED出现在/sys/class/leds/下,最大亮度定义在max_brightness文件,brightness文件用来设置LED的亮度(0-max_brightness之间)。大多数LED没有硬件亮度支持,所以对于非0值也只是打开而已。

这个类型也提供了一个可选的LED触发器概念。触发器(trigger)是一个基于内核的Led事件源。触发器可以很简单也可以很复杂。一个简单的触发器不可配置并被设计用来以最少的代码来适配已有的子系统。例如ide磁盘、闪存盘或充电触发器。当Led触发器被禁用,对应的代码已经优化。

对于所有拥有LED特定参数的触发器, 复杂的触发器白名单可以用于每一个基础的LED。定时触发器是一个例子。定时触发器将每隔一段时间修改LED亮度在LED_OFF和当前亮度值之间,“开启”和关闭的时间可以在/sys/class/leds/<device>/delay_{on,off}中指定(单位为毫秒)。你可以独立修改一个独立LED的定时器的亮度值。然而,如果你设置亮度值为LED_OFF,它将同时禁用时间触发器。

你可以用一个的方法来修改选定的IO规划器(通过/sys/class/leds/<device>/trigger)来修改触发器。一旦一个指定的触发器被选择,触发器指定的参数会出现在/sys/class/leds/<device>.


设计理念
========

下面的设计理论很简单。LED是一个简单的设备,目标是用少量的代码提供尽多的功能。当增强功能时请记住这一点。


LED设备命名
=================

当前格式是:

"devicename:colour:function"

有一些例如颜色等LED类的属性的调用被导出。做为一个解决方案不应承担过多的开销,我建议它们成为名字的一部分。上面的命名格式为将来的需要的属性留下了空间。如果选择的名称没有用,只需要留空就可以。

LED的硬件闪动加速
==================================

一些LED可以与CPU编码控制闪烁。要支持这一特性,LED驱动可以实现blink_set函数(查看<linux/leds.h>)。要设置一个LED闪烁,当然,更好的办法是用API函数led_blink_set(),它将检查并在必要时回落到软件实现。
要重新关闭闪烁,使用函数led_brightness_set(),它将不仅设置LED亮度,还停止任何闪烁需要的软件定时器。

如果你调用blink_set()函数时参数*delay_on==0 并且 *delay_off==0,应该选择一个用户友好的闪烁值。这是因为驱动将放弃Led子系统的delay_on和delay_off参数值。

通过brightness_set()设置亮度为0将完全关闭LED并且取消前面编程的硬件闪烁函数(如果存在)。

已知问题
========

LED触发器内核因为简单触发器函数会引起依赖性问题而不能成为一个模块。相对于简单触发器功能带来的好处,我认为这是一个小问题。剩下的的LED子系统可以模块化。


未来开发(略)
=============

 

分享到: