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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章