0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux LED子系統(tǒng)詳解

jf_30051736 ? 來源:jf_30051736 ? 作者:jf_30051736 ? 2023-06-10 10:37 ? 次閱讀

1. 簡介

  • 專欄總目錄
  • Linux 為了廣泛通用性及適應(yīng)性,各種框架都做得非常靈活而又復(fù)雜,小小的LED也不例外。支持了不 同的LED硬件設(shè)備,例如gpio接口i2c接口,LED芯片等。
  • 為了支持各種點(diǎn)燈效果,使用了Trigger框架,除了系統(tǒng)默認(rèn)的一些trigger外,用戶可以創(chuàng)建自定義trigger。因此,為了點(diǎn)個(gè)燈,軟件開發(fā)人員需要了解Linux中g(shù)pio, led, trigger三個(gè)模塊。
  • led框架核心文件:
    /kernel/include/linux/leds.h    // 重要,led相關(guān)結(jié)構(gòu)體,宏定義,trigger等
    目錄 /kernel/driver/leds/ 下
    	led-class.c  // 定義led class及相關(guān)接口
    	led-core.c   // export 了閃爍,設(shè)置亮滅等接口
    	led-gpio.c   // "leds-gpio" 驅(qū)動(dòng)
    	leds.h       // 提供幾個(gè)接口,如:led_init_core
    
  • trigger 框架核心文件:
    目錄 /kernel/driver/leds/ 下
        led-triggers.c    // export了許多接口,包括:led_trigger_register
    目錄 /kernel/driver/leds/trigger 下
        ledtrig-backlight.c
        ledtrig-camera.c
        ledtrig-cpu.c
        ledtrig-default-on.c
        ledtrig-disk.c
        ledtrig-gpio.c
        ledtrig-heartbeat.c   // 心跳燈效果
        ledtrig-mtd.c
        ledtrig-oneshot.c
        ledtrig-panic.c
        ledtrig-timer.c       // 定時(shí)器
        ledtrig-transient.c
    

以參考上面的trigger例子寫自己的trigger,或者改造,需要在make menuconfig里面選上才會(huì)編譯,如下:

在這里插入圖片描述

2. LED 調(diào)試

2.1 調(diào)試總覽,調(diào)試步驟分析

  • 步驟 一 : dts配置
  • 步驟 二 :編譯燒寫,調(diào)試

2.2 調(diào)試過程

  • 步驟 一 : dts配置
    ① leds節(jié)點(diǎn)是在rk3588-evb.dtsi文件中定義

    #include "rk3588-evb.dtsi"
    

    ② 定義四個(gè)led節(jié)點(diǎn): (檢查gpio是否被復(fù)用)

    使用命令:dmesg | grep cannot檢查是否有g(shù)pio沖突,有沖突的話驅(qū)動(dòng)代碼會(huì)中斷,后面的dts就不會(huì)生效。

    &leds {
            status = "okay";
            compatible = "gpio-leds";
            pinctrl-names = "default";
            pinctrl-0 = < &work1_led_gpio >, < &work2_led_gpio >,< &work3_led_gpio >,< &work4_led_gpio >;
    
            work1_led: work1{
                default-state = "off";
                gpios = < &gpio4 RK_PD2 GPIO_ACTIVE_HIGH >;
            };
    
            work2_led: work2{
                default-state = "off";      
                gpios = < &gpio4 RK_PD3 GPIO_ACTIVE_HIGH >;
            };
    
            work3_led: work3{
                default-state = "off";
                gpios = < &gpio4 RK_PD4 GPIO_ACTIVE_HIGH >;
            };
    
            work4_led: work4{
                default-state = "off";
                gpios = < &gpio4 RK_PD5 GPIO_ACTIVE_HIGH >;
            };
    };
    
    
    
    
    &pinctrl {
        leds{
                work1_led_gpio: work1-led-gpio{
                rockchip,pins = < 4 RK_PD2 RK_FUNC_GPIO &pcfg_pull_down >;
                };
    
                work2_led_gpio: work2-led-gpio{
                rockchip,pins = < 4 RK_PD3 RK_FUNC_GPIO &pcfg_pull_down >;
                };
    
                work3_led_gpio: work3-led-gpio{
                rockchip,pins = < 4 RK_PD4 RK_FUNC_GPIO &pcfg_pull_down >;
                };
    
                work4_led_gpio: work4-led-gpio{
                rockchip,pins = < 4 RK_PD5 RK_FUNC_GPIO &pcfg_pull_down >;
                };
            }; 
    }
    
  • 步驟二:調(diào)試,驗(yàn)證:在用戶空間操作led

    使用了驅(qū)動(dòng)框架后可以不需要編寫應(yīng)用程序就可以測試led是否能正常被點(diǎn)亮與熄滅,這些都可以在sysfs文件系統(tǒng)中完成。在裝載驅(qū)動(dòng)后可以在/sys/class/leds/目錄下看到對應(yīng)的led設(shè)備目錄,如本文中的work1(填充設(shè)備時(shí)的設(shè)備名字段)。

    ls /sys/class/leds/work1

    brightness      power           uevent
    max_brightness  subsystem
    

    點(diǎn)亮led

    echo 1 > brightness
    

    熄滅led

    echo 0 > brightness
    


審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • led
    led
    +關(guān)注

    關(guān)注

    242

    文章

    23277

    瀏覽量

    660892
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8598

    瀏覽量

    151163
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11304

    瀏覽量

    209517
  • 子系統(tǒng)
    +關(guān)注

    關(guān)注

    0

    文章

    109

    瀏覽量

    12402
  • RK3588
    +關(guān)注

    關(guān)注

    6

    文章

    329

    瀏覽量

    4344
收藏 人收藏

    評論

    相關(guān)推薦

    Linux下輸入子系統(tǒng)上報(bào)觸摸屏坐標(biāo)

    ??在 Linux 中,輸入子系統(tǒng)是由輸入子系統(tǒng)設(shè)備驅(qū)動(dòng)層、輸入子系統(tǒng)核心層(Input Core)和輸入子系統(tǒng)事件處理層(Event Ha
    的頭像 發(fā)表于 09-25 08:56 ?2500次閱讀
    <b class='flag-5'>Linux</b>下輸入<b class='flag-5'>子系統(tǒng)</b>上報(bào)觸摸屏坐標(biāo)

    linux--LED子系統(tǒng)一文讀懂

    Linux內(nèi)核中,LED子系統(tǒng)扮演著控制LED燈的核心角色,它通過一套規(guī)范化的驅(qū)動(dòng)架構(gòu),簡化了LED驅(qū)動(dòng)程序的開發(fā)流程,讓開發(fā)者能夠更專注
    的頭像 發(fā)表于 08-02 16:09 ?2543次閱讀
    <b class='flag-5'>linux--LED</b><b class='flag-5'>子系統(tǒng)</b>一文讀懂

    Linux系統(tǒng)命令及其使用詳解

    Linux系統(tǒng)命令及其使用詳解
    發(fā)表于 08-20 13:38

    linux輸入子系統(tǒng)詳解

    :Linux的輸入子系統(tǒng)詳解instruction: 配合linux—2.6.22.6內(nèi)核date: 2014-8-14
    發(fā)表于 08-14 16:59

    如何使用Linux內(nèi)核中的input子系統(tǒng)

    的 input 子系統(tǒng)下提供的 API 函數(shù)接口,完成設(shè)備的注冊即可。在本章節(jié)中我們來學(xué)習(xí)一下如何使用 Linux內(nèi)核中的 input 子系統(tǒng)
    發(fā)表于 12-29 07:20

    介紹下input子系統(tǒng)

    文章目錄前言input子系統(tǒng)按鍵檢測C代碼微信公眾號(hào)前言這是前3篇:嵌入式Linux i.MX開發(fā)板嵌入式Linux NFS嵌入式Linux 交叉編譯工具鏈嵌入式
    發(fā)表于 11-04 08:14

    基于Linux內(nèi)核輸入子系統(tǒng)的驅(qū)動(dòng)研究

    Linux因其完全開放的特性和穩(wěn)定優(yōu)良的性能深受歡迎,當(dāng)推出了內(nèi)核輸入子系統(tǒng)后,更方便了嵌入式領(lǐng)域的驅(qū)動(dòng)開放。介紹了Linux的設(shè)備驅(qū)動(dòng)基礎(chǔ),詳細(xì)闡述了基于Linux內(nèi)核輸入
    發(fā)表于 09-12 16:38 ?23次下載

    Linux設(shè)備驅(qū)動(dòng)開發(fā)詳解》第5章、Linux文件系統(tǒng)與設(shè)備文件系統(tǒng)

    Linux設(shè)備驅(qū)動(dòng)開發(fā)詳解》第5章、Linux文件系統(tǒng)與設(shè)備文件系統(tǒng)
    發(fā)表于 10-27 14:13 ?0次下載
    《<b class='flag-5'>Linux</b>設(shè)備驅(qū)動(dòng)開發(fā)<b class='flag-5'>詳解</b>》第5章、<b class='flag-5'>Linux</b>文件<b class='flag-5'>系統(tǒng)</b>與設(shè)備文件<b class='flag-5'>系統(tǒng)</b>

    Linux內(nèi)核輸入子系統(tǒng)的驅(qū)動(dòng)研究

    Linux內(nèi)核輸入子系統(tǒng)的驅(qū)動(dòng)研究
    發(fā)表于 10-31 14:41 ?14次下載
    <b class='flag-5'>Linux</b>內(nèi)核輸入<b class='flag-5'>子系統(tǒng)</b>的驅(qū)動(dòng)研究

    詳細(xì)了解Linux設(shè)備模型中的input子系統(tǒng)

    linux輸入子系統(tǒng)linux input subsystem)從上到下由三層實(shí)現(xiàn),分別為:輸入子系統(tǒng)事件處理層(EventHandler)、輸入
    發(fā)表于 05-12 09:04 ?1052次閱讀
    詳細(xì)了解<b class='flag-5'>Linux</b>設(shè)備模型中的input<b class='flag-5'>子系統(tǒng)</b>

    Windows 子系統(tǒng)助力 Linux 2.0

    Windows 子系統(tǒng)助力 Linux 2.0
    的頭像 發(fā)表于 01-04 11:17 ?656次閱讀

    Linux Led子系統(tǒng)代碼框架分析

    代碼框架分析 led-class.c (led 子系統(tǒng)框架的入口) 維護(hù) LED 子系統(tǒng)的所有 LED
    的頭像 發(fā)表于 07-20 10:36 ?765次閱讀

    Linux內(nèi)核之LED子系統(tǒng)(一)

    Linux內(nèi)核的LED子系統(tǒng)是一種重要的框架,用于管理和控制設(shè)備上的LED指示燈。在嵌入式系統(tǒng)和物聯(lián)網(wǎng)設(shè)備中,
    發(fā)表于 10-02 16:53 ?1354次閱讀
    <b class='flag-5'>Linux</b>內(nèi)核之<b class='flag-5'>LED</b><b class='flag-5'>子系統(tǒng)</b>(一)

    Linux內(nèi)核之LED子系統(tǒng)(二)

    這里說一說LED子系統(tǒng)的一些核心源代碼文件,是如何實(shí)現(xiàn)LED子系統(tǒng)。
    發(fā)表于 10-02 16:55 ?951次閱讀
    <b class='flag-5'>Linux</b>內(nèi)核之<b class='flag-5'>LED</b><b class='flag-5'>子系統(tǒng)</b>(二)

    Linux clock子系統(tǒng)是什么

    clock子系統(tǒng) Linux的時(shí)鐘子系統(tǒng)由CCF(common clock framework)框架管理, CCF向上給用戶提供了通用的時(shí)鐘接口,向下給驅(qū)動(dòng)開發(fā)者提供硬件操作的接口 。各結(jié)構(gòu)體關(guān)系
    的頭像 發(fā)表于 09-27 14:25 ?844次閱讀
    <b class='flag-5'>Linux</b> clock<b class='flag-5'>子系統(tǒng)</b>是什么