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
将 LED 平台设备添加到 smdkv210_devices
重新编译内核
运行测试
可以看到 LED 按照一定的规律在闪烁,这个可以作为指示灯。
/sys/class/leds/下有 2 个目录 led0 和 led1,进入 led0 操作
当向 led0 的 brightness 写入 0 后, led0 不再闪烁,如果要让 led0 恢复闪烁,只需向它的 trigger 属性文件写入 heartbeat
其实,可以不用在 mach-smdkv210.c 中设置 led 的触发器,我们直接通过上面的方式就可以使 led具有触发器功能,向 led1 的 trigger 写入 heartbeat 就可以使用 led1 具有触发器的功能, led1 开始闪烁
内核里面有多个触发器
网上有很多关于内核的各种各样的子系统的详细透彻的分析。
http://blog.csdn.net/yuanlulu/article/details/6438841
http://blog.csdn.net/yuanlulu/article/details/6438847
查看 TQ210 原理图
下面就在 mach-smdkv210.c 中来定义 LED 的平台设备及其平台数据
首先添加头文件 linux/leds.h
定义 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
配置内核
Device Drivers ---> [*] LED Support ---> <*> LED Class Support <*> LED Support for GPIO connected LEDs [*] LED Trigger support ---> <*> LED Heartbeat Trigger |
运行测试
可以看到 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 |
[aaa@qq.com$Louis210: led0]# echo heartbeat > trigger | led0 又恢复闪烁了 |
[aaa@qq.com$Louis210: led0]# cd ../led1/ [aaa@qq.com$Louis210: led0]# echo none > trigger |
写入 none 禁止触发器 |
上面通过向 led 的 trigger 属性写入对应的触发器名称,就可以使相应的 led 具有相应的触发器功能,
写入 none 禁止触发器。由于在上面的内核配置中只配置了 LED Heartbeat Trigger,因此只能写入 heartbeat,
要想写入其他的触发器,需要配置内核支持相应的触发器。