<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Openwrt開發指南 第20章 驅動開發之LED應用程序

嵌入式大雜燴 ? 來源:嵌入式大雜燴 ? 作者:嵌入式大雜燴 ? 2023-07-03 09:02 ? 次閱讀

開發環境:

主機:Ubuntu12.04

開發板:RT5350

Openwrt:Openwrt15.05

1 編寫應用程序

在前面的章節中, 我們成功的寫出了我們自己的驅動程序, 并且向應用程序提供了 open、ioctl 兩個接口,那么接下來我們就來編寫應用程序,調用這些接口。

#include < stdio.h >
#include < curses.h >
#include < sys/types.h >
#include < sys/stat.h >
#include < fcntl.h >
#include < unistd.h >
#include < sys/ioctl.h >
#include < string.h >
#define MYLEDS_LED1_ON 0
#define MYLEDS_LED1_OFF 1
#define MYLEDS_LED2_ON 2
#define MYLEDS_LED2_OFF 3
/*
** ledtest < dev > < on|off >
**/
void print_usage(char *file)
{
printf("Usage:\\n");
printf("%s < dev > < on|off >\\n",file);
printf("eg. \\n");
printf("%s led1 on\\n", file);
printf("%s led1 off\\n", file);
printf("%s led2 on\\n", file);
printf("%s led2 off\\n", file);
}
int main(int argc, char **argv)
{
int fd;
if (argc != 3)
{
print_usage(argv[0]);
return 0;
}
/* 1.打開設備節點 */
fd = open("/dev/myleds", O_RDWR | O_NONBLOCK);
if (fd < 0)
{
printf("can't open!\\n");
return -1;
}
/* 2.根據參數不同,控制 LEDs */
if(!strcmp("led1", argv[1]))
{
if (!strcmp("on", argv[2]))
{
// 亮燈
ioctl(fd, MYLEDS_LED1_ON);
}
else if (!strcmp("off", argv[2]))
{
// 滅燈
ioctl(fd, MYLEDS_LED1_OFF);
}
else
{
print_usage(argv[0]);
return 0;
}
}
else if(!strcmp("led2", argv[1]))
{
if (!strcmp("on", argv[2]))
{
// 亮燈
ioctl(fd, MYLEDS_LED2_ON);
}
else if (!strcmp("off", argv[2]))
{
// 滅燈
ioctl(fd, MYLEDS_LED2_OFF);
}
else
{
print_usage(argv[0]);
return 0;
}
}
else
{
print_usage(argv[0]);
return 0;
}
return 0;
}

該應用程序很簡單,main 函數是我們應用程序的入口函數,然后在 main 函數的開始部分,首先對參數個數進行了判斷,如果參數個數小于 2 個,則打印出幫助信息,并返回。接著就是調用驅動程序提供的 open 函數接口,來打開相應的設備節點。當打開成功以后,我們就可以對該驅動進行控制操作了,那么,我們就是通過 ioctl 向驅動發送命令,從而來控制想要的設備。ioctl 函數,一共有 2 個參數,參數 1,是前面的 open 函數返回的文件句柄,參數 2,就是我們要發送的命令了,這個命令應該和驅動程序約定好。

2 寫 Makefile 文件

前面我們寫出了應用程序, 接下來我們就要編譯該應用程序。 首先創建一個 myleds_test目錄,然后進入該目錄,再創建一個 src 目錄,在 src 目錄下新建一個 Makefile 文件,內容如下。

CC = gcc
CFLAGS = -Wall
OBJS = myleds_test.o
all: myleds_test
%.o: %.c
$(CC) $(CFLAGS) -c -o $@ $  $(LDFLAGS)
fbtest: $(OBJS)
$(CC) -o $@ $(OBJS) $(LDFLAGS)
clean:
rm -f rbcfg *.o

然后將前面寫的應用程序 myleds_test.c 復制到該目錄下,接著回到上一級目錄,即myleds_test目錄,再創建一個 Makefile 文件,內容如下。

# 
#Copyright (C) 2019 OpenWrt.org
# 
#This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
PKG_NAME:=myleds_test
PKG_RELEASE:=1
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
include $(INCLUDE_DIR)/package.mk
define Package/myleds_test
SECTION:=utils
CATEGORY:=Utilities
TITLE:=Frame buffer device testing tool
DEPENDS:=+libncurses
endef
define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
$(CP) ./src/* $(PKG_BUILD_DIR)/
endef
define Build/Configure
endef
TARGET_LDFLAGS :=
define Build/Compile
$(MAKE) -C $(PKG_BUILD_DIR) \\
CC="$(TARGET_CC)" \\
CFLAGS="$(TARGET_CFLAGS) -Wall" \\
LDFLAGS="$(TARGET_LDFLAGS)"
endef
define Package/myleds_test/install
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/myleds_test $(1)/usr/sbin/
endef
$(eval $(call BuildPackage,myleds_test))

關于該 Makefile 的語法,在前面的章節中已經講解過,不再贅述。

3 編譯應用程序

將 myleds_test 的整個文件傳到 OpenWrt 系統源碼的package 目錄下,然后進入 OpenWrt 系統源碼的頂層目錄,執行 make menuconfig。

$ make menuconfig

在彈出的菜單選項中,配置選項。

Utilities --->

<* > myleds_test

1688309681269x4ci4b0lar

圖1

接著我們就能看到我們自己寫的應用程序的選項 myleds_test,將該選項配置進系統,即選為*。接下來,退出保存,并重新編譯系統。

$ make V=99

編譯完成以后,新生成的固件里面,就已經包含了我們的應用程序了

20.4 測試

將新編譯出來的固件,重新燒入開發板。然后將前面編譯出來的驅動模塊軟件包也傳入到開發板。接下來就開始測試。

1). 安裝驅動程序

opkg install kmod-myleds_3.18.109-1_ramips_24kec.ipk

cd lib/modules/3.18.109/

insmod myleds.ko

2). 運行測試程序

cd /

myleds_test led1 on

myleds_test led1 off

myleds_test led2 on

myleds_test led2 off

當我們執行 myleds_test led1 on 這條命令的時候,我們會發現 GPIO25 輸出了高電平,如果上面有 LED 燈,它則會被點亮,如果沒有,我們可以用萬用表測試一下電平;當我們執行 myleds_test led1 off 這條命令的時候,我們會發現 GPIO25 輸出了低電平,如果上面有LED 燈,它則不會被點亮,如果沒有,我們可以用萬用表測試一下電平;同理,myleds_testled2 on 則是讓 GPIO26 輸出高電平。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • led
    led
    +關注

    關注

    237

    文章

    22550

    瀏覽量

    646838
  • 接口
    +關注

    關注

    33

    文章

    7859

    瀏覽量

    148998
  • 開發板
    +關注

    關注

    25

    文章

    4560

    瀏覽量

    94883
  • 應用程序
    +關注

    關注

    37

    文章

    3168

    瀏覽量

    56802
  • OpenWrt
    +關注

    關注

    10

    文章

    120

    瀏覽量

    38976
收藏 人收藏

    評論

    相關推薦

    Openwrt開發指南 第25章 配置OpenWrt支持網絡攝像頭

    Openwrt開發指南 第25章 配置OpenWrt支持網絡攝像頭
    的頭像 發表于 07-13 08:56 ?1698次閱讀
    <b class='flag-5'>Openwrt</b><b class='flag-5'>開發指南</b> 第25章 配置<b class='flag-5'>OpenWrt</b>支持網絡攝像頭

    Openwrt開發指南 第3章 OpenWrt下載及配置

    編譯OpenWrt首先需要下載源碼,OpenWrt的源碼是通過git下載,OpenWrt目前已經很好的支持了MT7620、MT7821等芯片,因此OpenWrt系統完全可以用于MT76
    的頭像 發表于 06-27 09:10 ?4160次閱讀
    <b class='flag-5'>Openwrt</b><b class='flag-5'>開發指南</b> 第3章 <b class='flag-5'>OpenWrt</b>下載及配置

    Openwrt開發指南 第4章 燒寫OpenWrt固件

    對于一個完整的嵌入式系統,它由U-boot、內核(Linux)、文件系統、應用程序四部分組成。那么這四部分之間的關系是怎么樣的呢?OpenWrt是屬于哪部分呢?
    的頭像 發表于 06-27 09:11 ?3812次閱讀
    <b class='flag-5'>Openwrt</b><b class='flag-5'>開發指南</b> 第4章 燒寫<b class='flag-5'>OpenWrt</b>固件

    Openwrt開發指南 第24章 配置開發板支持U盤

    Openwrt開發指南 第24章 配置開發板支持U盤
    的頭像 發表于 07-13 08:55 ?1617次閱讀
    <b class='flag-5'>Openwrt</b><b class='flag-5'>開發指南</b> 第24章 配置<b class='flag-5'>開發</b>板支持U盤

    CE驅動程序開發指南資料分享

    CE驅動程序開發指南資料分享
    發表于 08-03 12:03

    AVR單片機應用開發指南及實例

    圖書簡介及目錄:《AVR單片機應用開發指南及實例精解》結構清晰,由淺入深,通俗易懂,結合ATmega128單片機闡述AVR單片機的理論和工程應用?!禔VR單片機應用開發指南及實例精解》共分9,主要
    發表于 07-28 10:28

    Labview開發技術叢書--大型應用程序與多人開發指南

    Labview開發技術叢書--大型應用程序與多人開發指南
    發表于 09-02 18:07

    【下載】《USB開發大全》—USB軟硬件開發指南,無可替代的工具書

    主機的通信方式9 為設備匹配驅動程序10 設備檢測11
    發表于 06-15 18:35

    Mali GPU OpenGL ES應用程序開發指南

    這是適用于馬里GPU的OpenGL ES應用程序開發指南。 它提供了使用OpenGL ES 1.1和OpenGL ES 2.0 API為馬里GPU開發應用程序
    發表于 08-30 07:57

    SN3340 LED驅動IC應用開發指南

    SN3340 LED驅動IC應用開發指南:The SN3340 is a continuous mode inductive step-downconverter, designed
    發表于 01-07 17:20 ?31次下載

    MATLAB Runtime Server 應用程序開發指南

    MATLAB Runtime Server 應用程序開發指南:The MATLAB Runtime Server is a variant of MATLAB®
    發表于 02-21 08:40 ?40次下載

    A64開發板LCD開發指南

    A64開發板LCD開發指南,驅動開發指南
    發表于 06-21 17:02 ?0次下載

    橫版排插開發指南

    橫版排插開發指南
    發表于 12-29 20:02 ?0次下載

    彩光燈開發指南

    彩光燈開發指南
    發表于 12-29 20:15 ?0次下載

    UM2298_STM32Cube BSP驅動程序開發指南

    UM2298_STM32Cube BSP驅動程序開發指南
    發表于 11-22 19:19 ?1次下載
    UM2298_STM32Cube BSP<b class='flag-5'>驅動程序</b><b class='flag-5'>開發指南</b>
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>