LED子系统剖析
http://blog.csdn.net/shiyi_2012/article/details/7456165
http://blog.csdn.net/tommy_wxie/article/details/7622498
LED子系统的实现原理:
1、首先创建一个leds类,生成/sys/class/leds目录
2、其次在leds类下建立设备文件节点
3、接着对各设备文件节点添加属性文件
4、最后使用cat和echo命令对属性文件进行读写,实现对LED灯的控制
sysfs中的属性文件:
/driver/rtc/led-class.c会首先创建一个leds类,生成/sys/class/leds目录。
在led_classdev_register中生成了两个sysfs属性文件,它们使用的属性参数如下:
static DEVICE_ATTR(brightness
, 0644, led_brightness_show, led_brightness_store);
static DEVICE_ATTR(trigger, 0644, led_trigger_show, led_trigger_store);
static DEVICE_ATTR(trigger, 0644, led_trigger_show, led_trigger_store);
led_brightness_show和led_brightness_store分别负责显示和设置亮度,用户控件通过
/sys/class/leds/<device>/brightness查看和设置亮度就是和这两个函数交互的。
led_trigger_show用于读取当前触发器的名字,led_trigger_store用于指定触发器的名字,
它会寻找所有已注册的触发器,找到同名的并设置为当前led的触发器。
/sys/class/leds/<device>/trigger用于用户空间查看和设置触发器。
触发器的添加和使用:
1、在KERNEL_DIR/drivers/leds目录下添加相应代码实现自己的触发逻辑(参照ledtrig-heartbeat.c)
2、在menuconfig的device-drivers-->led-support中添加配置选项并选中(参照heartbeat)
3、这样在KERNEL_DIR/arch/arm/mach-omap2/board-am335xevm.c的static struct gpio_led gpio_leds[]中就
可使用此触发器配置LED设备了