AIO-3399C 開發(fā)板上有 2 個 LED 燈,如下表所示:
以設(shè)備的方式控制 LED可通過使用 LED 設(shè)備子系統(tǒng)或者直接操作 GPIO 控制該 LED。
標(biāo)準(zhǔn)的 Linux 專門為 LED 設(shè)備定義了 LED 子系統(tǒng)。 在 AIO-3399C 開發(fā)板中的兩個 LED 均以設(shè)備的形式被定義。
用戶可以通過 /sys/class/leds/ 目錄控制這兩個 LED。
開發(fā)板上的 LED 的默認(rèn)狀態(tài)為:
-
Blue: 系統(tǒng)上電時打開
-
Yellow:用戶自定義
用戶可以通過 echo 向其 brightness屬性輸入命令控制每一個 LED:
root@rk3399_firefly_box:~ # echo 0 >/sys/class/leds/firefly:blue:power/brightness //藍(lán)燈滅 root@rk3399_firefly_box:~ # echo 1 >/sys/class/leds/firefly:blue:power/brightness //藍(lán)燈亮
Trigger 包含多種方式可以控制LED,這里就用兩個例子來說明
-
Simple trigger LED
-
Complex trigger LED
更詳細(xì)的說明請參考 leds-class.txt 。
首先我們需要知道定義多少個LED,同時對應(yīng)的LED的屬性是什么。
在 kernel/arch/arm64/boot/dts/rockchip/rk3399-firefly-port.dts 文件中定義LED節(jié)點,具體定義如下:
leds { compatible = "gpio-leds"; power{ label = "firefly:blue:power"; linux,default-trigger = "ir-power-click"; default-state = "on"; gpios = <&gpio2 27 GPIO_ACTIVE_HIGH>; pinctrl-names = "default"; pinctrl-0 = <&led_power>; }; user{ label = "firefly:yellow:user"; linux,default-trigger = "ir-user-click"; default-state = "off"; gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>; pinctrl-names = "default"; pinctrl-0 = <&led_user>; }; };
注意:compatible 的值要跟 drivers/leds/leds-gpio.c 中的 .compatible 的值要保持一致。
按名字來是看就是簡單的觸發(fā)方式控制LED,如下就默認(rèn)打開黃燈,AIO-3399C開機(jī)后黃燈就亮
(1)定義 LED 觸發(fā)器 在kernel/drivers/leds/trigger/led-firefly-demo.c 文件中有如下添加
DEFINE_LED_TRIGGER(ledtrig_default_control);
(2)注冊該觸發(fā)器
led_trigger_register_simple("ir-user-click", &ledtrig_default_control);
(3)控制 LED 的亮。
led_trigger_event(ledtrig_default_control, LED_FULL); //yellow led on
(4)打開LED demo
led-firefly-demo默認(rèn)沒有打開,如果需要的話可以使用以下補(bǔ)丁打開demo驅(qū)動:
--- a/kernel/arch/arm64/boot/dts/rockchip/rk3399-firefly-demo.dtsi +++ b/kernel/arch/arm64/boot/dts/rockchip/rk3399-firefly-demo.dtsi @@ -52,7 +52,7 @@ led_demo: led_demo { - status = "disabled"; + status = "okay"; compatible = "firefly,rk3399-led"; };
如下是trigger方式控制LED復(fù)雜一點的例子,timer trigger 就是讓LED達(dá)到不斷亮滅的效果
我們需要在內(nèi)核把timer trigger配置上
在 kernel 路徑下使用 make menuconfig ,按照如下方法將timer trigger驅(qū)動選中。
Device Drivers --->LED Support --->LED Trigger support --->LED Timer Trigger
保存配置并編譯內(nèi)核,把kernel.img 燒到AIO-3399C板子上 我們可以使用串口輸入命令,就可以看到藍(lán)燈不停的間隔閃爍
echo "timer" > sys/class/leds/firefly\:blue\:power/trigger
用戶還可以使用 cat 命令獲取 trigger 的可用值:
root@rk3399_firefly_box:/ # cat sys/class/leds/firefly\:blue\:power/trigger none rc-feedback test_ac-online test_battery-charging-or-full test_battery-charging test_battery-full test_battery-charging-blink-full-solid test_usb-online mmc0 mmc1 ir-user-click [timer] heartbeat backlight default-on rfkill0 mmc2 rfkill1 rfkill2
-
Linux
+關(guān)注
關(guān)注
87文章
11320瀏覽量
209845 -
嵌入式主板
+關(guān)注
關(guān)注
7文章
6085瀏覽量
35438 -
Firefly
+關(guān)注
關(guān)注
2文章
538瀏覽量
7068
發(fā)布評論請先 登錄
相關(guān)推薦
評論