kernel(九)LED(触发器)

内核里面实现了一个 LED 子系统, 参考文档为 Documentation/leds/leds-class.txt
网上有很多关于内核的各种各样的子系统的详细透彻的分析。
http://blog.csdn.net/yuanlulu/article/details/6438841
http://blog.csdn.net/yuanlulu/article/details/6438847

查看 TQ210 原理图

kernel(九)LED(触发器)_第1张图片

下面就在 mach-smdkv210.c 中来定义 LED 的平台设备及其平台数据
首先添加头文件 linux/leds.h
kernel(九)LED(触发器)_第2张图片

定义 LED 平台设备

/*leds gpio (add by JerryGou)*/
static struct gpio_led leds[] = {
    [0] = {
        .name = "led0",
        .default_trigger = "heartbeat",
        .gpio = S5PV210_GPC0(3),
        .active_low = 0,
        .default_state = LEDS_GPIO_DEFSTATE_OFF,
    },
    [1] = {
        .name = "led1",
        .gpio = S5PV210_GPC0(4),
        .active_low = 0,
        .default_state = LEDS_GPIO_DEFSTATE_OFF,
    },
};

static struct gpio_led_platform_data tq210_leds_pdata = {
    .num_leds = ARRAY_SIZE(leds),
    .leds = leds,
};

static struct platform_device tq210_leds = {
    .name = "leds-gpio",
    .dev = {
        .platform_data = &tq210_leds_pdata,
    },
    .id = -1,
};

active_low=0 表示高电平有效, led0 定义为心跳触发器。
将 LED 平台设备添加到 smdkv210_devices 
kernel(九)LED(触发器)_第3张图片

配置内核

Device Drivers --->
        [*] LED Support --->
                <*> LED Class Support
                <*> LED Support for GPIO connected LEDs
                [*] LED Trigger support --->
                        <*> LED Heartbeat Trigger

重新编译内核
运行测试
可以看到 LED 按照一定的规律在闪烁,这个可以作为指示灯。
kernel(九)LED(触发器)_第4张图片
/sys/class/leds/下有 2 个目录 led0 和 led1,进入 led0 操作

[root@$Louis210: led0]# echo 1 > brightness
[root@$Louis210: led0]# echo 0 > brightness
点亮 led0
熄灭 led0

  当向 led0 的 brightness 写入 0 后, led0 不再闪烁,如果要让 led0 恢复闪烁,只需向它的 trigger 属性文件写入 heartbeat

[root@$Louis210: led0]# echo heartbeat > trigger led0 又恢复闪烁了

    其实,可以不用在 mach-smdkv210.c 中设置 led 的触发器,我们直接通过上面的方式就可以使 led具有触发器功能,向 led1 的 trigger 写入 heartbeat 就可以使用 led1 具有触发器的功能, led1 开始闪烁

[root@$Louis210: led0]# cd ../led1/
[root@$Louis210: led0]# echo heartbeat > trigger

[root@$Louis210: led0]# echo none > trigger

 

写入 none 禁止触发器

内核里面有多个触发器

kernel(九)LED(触发器)_第5张图片

        上面通过向 led 的 trigger 属性写入对应的触发器名称,就可以使相应的 led 具有相应的触发器功能,
写入 none 禁止触发器。由于在上面的内核配置中只配置了 LED Heartbeat Trigger,因此只能写入 heartbeat,
要想写入其他的触发器,需要配置内核支持相应的触发器。
 

你可能感兴趣的:(kernel)