欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

kernel(九)LED(触发器)

程序员文章站 2022-07-14 10:18:41
...
内核里面实现了一个 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(触发器)

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

定义 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(触发器)

配置内核

Device Drivers --->
        [*] LED Support --->
                <*> LED Class Support
                <*> LED Support for GPIO connected LEDs
                [*] LED Trigger support --->
                        <*> LED Heartbeat Trigger
重新编译内核
运行测试
可以看到
LED 按照一定的规律在闪烁,这个可以作为指示灯。
kernel(九)LED(触发器)
/sys/class/leds/下有 2 个目录 led0 led1,进入 led0 操作
[aaa@qq.com$Louis210: led0]# echo 1 > brightness
[aaa@qq.com$Louis210: led0]# echo 0 > brightness
点亮 led0
熄灭 led0
  当向 led0 的 brightness 写入 0 后, led0 不再闪烁,如果要让 led0 恢复闪烁,只需向它的 trigger 属性文件写入 heartbeat

[aaa@qq.com$Louis210: led0]# echo heartbeat > trigger led0 又恢复闪烁了
    其实,可以不用在 mach-smdkv210.c 中设置 led 的触发器,我们直接通过上面的方式就可以使 led具有触发器功能,向 led1 的 trigger 写入 heartbeat 就可以使用 led1 具有触发器的功能, led1 开始闪烁

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

[aaa@qq.com$Louis210: led0]# echo none > trigger


写入 none 禁止触发器

内核里面有多个触发器

kernel(九)LED(触发器)

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


相关标签: kernel