(a40i)嵌入式Linux LED驅(qū)動(dòng)

簡介

? ? ? ? Linux內(nèi)核已經(jīng)集成LED燈驅(qū)動(dòng)。Linux內(nèi)核的LED燈驅(qū)動(dòng)采用platform框架,因此我們只需要在設(shè)備樹文件中添加相應(yīng)LED節(jié)點(diǎn)即可;接下來我們學(xué)習(xí)如何在全志 a40i平臺(tái)下使用Linux內(nèi)核自帶的LED驅(qū)動(dòng)來驅(qū)動(dòng) board 上LED。

開發(fā)環(huán)境介紹

  • 主機(jī)操作系統(tǒng):Ubuntu14.04 64位
  • 目標(biāo)平臺(tái):A40I (ARM Cortex-A7)
  • 交叉工具鏈:arm-linux-gnueabi,gcc5.3.1
  • 內(nèi)核版本:3.10

使能Linux內(nèi)核自帶的LED驅(qū)動(dòng)

? ? ? ? 使用Linux內(nèi)核自帶的LED燈驅(qū)動(dòng)首先需要配置Linux內(nèi)核,使能自帶的LED燈驅(qū)動(dòng);使能方法如下:

Step1. 打開Linux配置菜單
make ARCH=arm menuconfig
Step2. 打開LED驅(qū)動(dòng)配置項(xiàng)
Device Drivers  ---> 
    [*] LED Support  --->
        <*>   LED Support for GPIO connected LEDs

選擇 “LED Support for GPIO connected LEDs”,將其編譯進(jìn)內(nèi)核,也即是在此選項(xiàng)上按下“Y”鍵(或通過空格鍵選擇),使此選型前面變成“<*>”,如下圖所示:

在““LED Support for GPIO connected LEDs”上按下“h”鍵,打開幫助信息,如下圖:


從上圖可以看出,把Linux內(nèi)核自帶LED驅(qū)動(dòng)編譯進(jìn)內(nèi)核以后 ,CONFIG_LEDS_GPIO就會(huì)等于y,Linux會(huì)根據(jù)CONFIG_LEDS_GPIO的值來選擇如何編譯LED燈驅(qū)動(dòng),如果為“y”,就將其編譯進(jìn)內(nèi)核。
配置好Linux內(nèi)核后退出配置界面,打開“.config”,可以看到CONFIG_LEDS_GPIO=y

Step3. 添加設(shè)備樹節(jié)點(diǎn)

根據(jù)內(nèi)核提供的LED設(shè)備樹節(jié)點(diǎn)添加參考說明文檔:
Documentation/devicetree/bindings/leds/leds-gpio.txt;
在設(shè)備樹文件中添加LED設(shè)備節(jié)點(diǎn):

leds {
    compatible = "gpio-leds";
    pinctrl-names = "default";
    status = "okay";

    com: com-led {
        label = "com";
        gpios = <&pio PH 21 1 1 1 0>;
        defaults-state = "off";  
    };
};

①、創(chuàng)建LED燈設(shè)備leds,如果板子上有多個(gè)LED燈的話,每個(gè)LED燈作為leds的子節(jié)點(diǎn)即可;
②、leds節(jié)點(diǎn)的compatible屬性值必須為“gpio-leds”,由驅(qū)動(dòng)文件決定;
③、label,每個(gè)子節(jié)點(diǎn)都可以設(shè)置一個(gè)lable屬性,一般label屬性表示LED燈的名字,在sysfs中的表現(xiàn)如:/sys/class/leds/com
④、defaults-state:設(shè)置默認(rèn)屬性值;on,默認(rèn)打開;off,默認(rèn)關(guān)閉;keep,LED燈保持當(dāng)前模式;
⑤、gpios屬性值:表示LED燈所使用的引腳,在不同的平臺(tái)下,可能會(huì)有不同的配置語法,對(duì)于a40i平臺(tái),詳細(xì)參考A40I Pinctrl(GPIO)接口使用說明書V1.0.pdf

應(yīng)用測(cè)試

使用了LED子系統(tǒng)驅(qū)動(dòng)的設(shè)備,會(huì)被展現(xiàn)在/sys/class/leds目錄下

Func1.腳本測(cè)試

打開COM LED燈:

echo 1 > /sys/class/leds/com/brightness

關(guān)閉COM LED燈:

echo 0 > /sys/class/leds/com/brightness
Func2.系統(tǒng)調(diào)用測(cè)試
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>

//ARM 開發(fā)板LED設(shè)備的路徑
#define LED_DEV_PATH "/sys/class/leds/com/brightness"


int main(int argc, char *argv[])
{
   int res = 0;
   int fd;

   printf("This is the led demo\n");

   //獲取LED燈的設(shè)備文件描述符
   fd = open(LED_DEV_PATH , O_WRONLY);
   if(fd< 0){
      printf("Fail to Open %s device\n", LED_DEV_PATH );
      exit(1);
   }


   while(1)
{
      write(fd, "255", 3);
      sleep(1);
      write(fd, "0", 1);
      sleep(1);
   }
  close(fd);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1 硬件結(jié)構(gòu) 我使用的是風(fēng)火輪出品的樹莓派A20板子,同樣也買了一個(gè)DVK521擴(kuò)展的底板,可以看到有8個(gè)LED燈...
    wit_yuan閱讀 3,325評(píng)論 0 1
  • 一、前言 在嵌入式中,GPIO作為一個(gè)常用的信息輸入輸出手段經(jīng)常被用在各種場(chǎng)合,那么今天本文就來簡單地說一下嵌入式...
    wipping的技術(shù)小棧閱讀 4,593評(píng)論 0 0
  • feisky云計(jì)算、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 4,283評(píng)論 0 5
  • 姓名:吳兆陽 學(xué)號(hào):14020199009 轉(zhuǎn)自韋東山 嵌牛導(dǎo)讀:對(duì)嵌入式初學(xué)者,沒有足夠的視野選擇一個(gè)合適投入方...
    吳兆陽閱讀 2,514評(píng)論 0 4
  • 內(nèi)衣會(huì)讓女人變得風(fēng)情萬種,能夠更加凹凸有致嫵媚動(dòng)人,幫她們盡情展示內(nèi)衣真是美好的一面。夢(mèng)幻、性感的設(shè)計(jì),精致的蕾絲...
    futomix閱讀 1,015評(píng)論 0 0

友情鏈接更多精彩內(nèi)容