Linux Kernel 控制 GPIO LED 闪烁 (Blink)

关于Linux 下面使用gpio 控制led灯 有很多方式.

1.直接操作GPIO : 比如gpio15 ,那么就使用

    echo 15 > /sys/class/gpio
    echo out > /sys/class/gpio/gpio15/direction
    echo 1 > /sys/class/gpio/gpio15/value //enable
    echo 1 > /sys/class/gpio/gpio15/value //disable

2.使用led-gpio设备驱动, 将gpio做成led设备(比如led取名green),这个一般需要修改kernel 中对应板卡的dev.c文件, 注册 gpio_led_platform_data 设备
那样就是控制 /sys/class/led/green

    echo 0 > /sys/class/led/green/brightness
    echo 1 > /sys/class/led/green/brightness //大于0的数值都OK

那么如果控制LED灯的闪烁呢?有两种方式:

  1. 应用空间控制,通过操作led的亮和灭来模拟闪烁.
    网上描述的大部分都是这种方式.这种方式的好处是简单,并且通过应用程序控制,比较好根据实际的应用逻辑进行操作.
    但是如果用户的应用对时间要求很高,或在无法进行阻塞等待,那么这种方式就可能不能满足需求.这个时候推荐使用kernel进行闪烁控制.

  2. kernel控制led的闪烁
    这里只描述最简单的实现方式.
    打开kernel的 CONFIG_LEDS_TRIGGERS 和 CONFIG_LEDS_TRIGGER_TIMER
    已led名字为green 为例:

#cat /sys/class/led/green/trigger 
  [none] nand-disk mmc0 timer

输出类似上面的trigger条件,默认的是不闪烁,就是none

 echo timer > /sys/class/led/green/trigger 

这样 green 这个led灯就开始闪烁,默认是亮500ms,灭500ms. 如果想修改闪烁频率,可以直接修改 /sys/class/led/green/delay_on 和 /sys/class/led/green/delay_off

  echo 100 > /sys/class/led/green/delay_on
   echo 100 > /sys/class/led/green/delay_off
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章