開(kāi)發(fā)環(huán)境:
主機(jī):Ubuntu12.04
開(kāi)發(fā)板:RT5350
Openwrt:Openwrt15.05
1 編寫(xiě)應(yīng)用程序
在前面的章節(jié)中, 我們成功的寫(xiě)出了我們自己的驅(qū)動(dòng)程序, 并且向應(yīng)用程序提供了 open、read、write 三個(gè)接口,那么接下來(lái)我們就來(lái)編寫(xiě)應(yīng)用程序,調(diào)用這些接口。
#include < sys/types.h >
#include < sys/stat.h >
#include < fcntl.h >
#include < stdio.h >
int main(int argc, char **argv)
{
int fd;
char val;
fd = open("/dev/RT5350", O_RDWR);
if (fd < 0)
{
printf("Can't open /dev/RT5350\\n");
}
read(fd, &val, 1);
write(fd, &val, 1);
return 0;
}
該應(yīng)用程序很簡(jiǎn)單,就是在 main 函數(shù)里面依次調(diào)用了 open、read、write 三個(gè)函數(shù)接口。
2 寫(xiě)Makefile 文件
前面我們寫(xiě)出了應(yīng)用程序,下來(lái)我們就要編譯應(yīng)用程序。首先創(chuàng)建一個(gè)RT5350_drv_test 目錄,然后進(jìn)入該目錄,再創(chuàng)建一個(gè) src 目錄,在 src 目錄下新建一個(gè)Makefile 文件,內(nèi)容如下。
CC = gcc
CFLAGS = -Wall
OBJS = RT5350_drv_test.o
all: RT5350_drv_test
%.o: %.c
$(CC) $(CFLAGS) -c -o $@ $ $(LDFLAGS)
fbtest: $(OBJS)
$(CC) -o $@ $(OBJS) $(LDFLAGS)
clean:
rm -f rbcfg *.o
CC = gcc
CFLAGS = -Wall
OBJS = RT5350_drv_test.o
all: RT5350_drv_test
%.o: %.c
**(CC) **(CFLAGS) -c -o **@ **< $(LDFLAGS)
fbtest: $(OBJS)
**(CC) -o **@ **(OBJS) **(LDFLAGS)
clean:
rm -f rbcfg *.o
然后將前面寫(xiě)的應(yīng)用程序RT5350_drv_test.c 復(fù)制到該目錄下, 接著回到上一級(jí)目錄,即 RT5350_drv_test 目錄,再創(chuàng)建一個(gè) Makefile 文件,內(nèi)容如下。
#
#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:=RT5350_drv_test
PKG_RELEASE:=1
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
include $(INCLUDE_DIR)/package.mk
define Package/RT5350_drv_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/RT5350_drv_test/install
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/RT5350_drv_test $(1)/usr/sbin/
endef
$(eval $(call BuildPackage,RT5350_drv_test))
關(guān)于該 Makefile 的語(yǔ)法,在前面的章節(jié)中已經(jīng)講解過(guò),不再贅述。
3 編譯應(yīng)用程序
將RT5350_drv_test 的整個(gè)文件傳到OpenWrt系統(tǒng)源碼的package 目錄下,然后進(jìn)入 OpenWrt 系統(tǒng)源碼的頂層目錄,執(zhí)行 make menuconfig。
$ cd openwrt/
$ make menuconfig
在彈出的菜單選項(xiàng)中。
Utilities --- >
< * > RT5350_drv_test
圖1
我們就能看到我們自己寫(xiě)的應(yīng)用程序的選項(xiàng) RT5350_drv_test,將該選項(xiàng)配置進(jìn)系統(tǒng),即選為*。接下來(lái),退出保存,并重新編譯系統(tǒng)。
$make V=99
編譯完成以后,新生成的固件里面,就已經(jīng)包含了我們的應(yīng)用程序了。
18.4 測(cè)試
然后將前面編譯出來(lái)的驅(qū)動(dòng)模塊軟件包也傳入到開(kāi)發(fā)板。接下來(lái)就開(kāi)始測(cè)試。
1). 安裝驅(qū)動(dòng)程序
opkg install kmod-RT5350_drv_3.18.109-1_ramips_24kec.ipk
cd lib/modules/3.18.109/
insmod RT5350_drv.ko
2). 運(yùn)行測(cè)試程序
cd /
RT5350_drv_test
3). 卸載驅(qū)動(dòng)
rmmod RT5350_drv
當(dāng)運(yùn)行測(cè)試程序的時(shí)候,我們就能看到驅(qū)動(dòng)中 open、read、write 函數(shù)中的調(diào)試信息。從而說(shuō)明應(yīng)用程序成功的調(diào)用了驅(qū)動(dòng)的相應(yīng)的函數(shù)。
審核編輯:湯梓紅
-
驅(qū)動(dòng)程序
+關(guān)注
關(guān)注
19文章
810瀏覽量
47860 -
開(kāi)發(fā)板
+關(guān)注
關(guān)注
25文章
4834瀏覽量
96820 -
Ubuntu
+關(guān)注
關(guān)注
5文章
554瀏覽量
29429 -
應(yīng)用程序
+關(guān)注
關(guān)注
37文章
3221瀏覽量
57499 -
OpenWrt
+關(guān)注
關(guān)注
10文章
123瀏覽量
39227
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論