第18章 驱动开发之字符设备应用程序
程序员文章站
2022-04-17 22:08:25
...
18.1 编写应用程序
在前面的章节中, 我们成功的写出了我们自己的驱动程序, 并且向应用程序提供了 open、read、write 三个接口,那么接下来我们就来编写应用程序,调用这些接口。
#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/f403tech", O_RDWR);
if (fd < 0)
{
printf("Can't open /dev/f403tech\n");
}
read(fd, &val, 1);
write(fd, &val, 1);
return 0;
}
该应用程序很简单,就是在 main 函数里面依次调用了 open、read、write 三个函数接口。
18.2写Makefile 文件
前面我们写出了应用程序,下来我们就要编译应用程序。首先创建一个f403tech_drv_test 目录,然后进入该目录,再创建一个 src 目录,在 src 目录下新建一个Makefile 文件,内容如下。
CC = gcc
CFLAGS = -Wall
OBJS = f403tech_drv_test.o
all: f403tech_drv_test
%.o: %.c
$(CC) $(CFLAGS) -c -o aaa@qq.com $< $(LDFLAGS)
fbtest: $(OBJS)
$(CC) -o aaa@qq.com $(OBJS) $(LDFLAGS)
clean:
rm -f rbcfg *.o
然后将前面写的应用程序 f403tech_drv_test.c 复制到该目录下, 接着回到上一级目录,即 f403tech_drv_test 目录,再创建一个 Makefile 文件,内容如下。
#
#Copyright (C) 2012 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:=f403tech_drv_test
PKG_RELEASE:=1
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
include $(INCLUDE_DIR)/package.mk
define Package/f403tech_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/f403tech_drv_test/install
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/f403tech_drv_test $(1)/usr/sbin/
endef
$(eval $(call BuildPackage,f403tech_drv_test))
关于该 Makefile 的语法,在前面的章节中已经讲解过,不再赘述。
18.3 编译应用程序
将 f403tech_drv_test 的整个文件传到OpenWrt系统源码的 openwrt/trunk/package 目录下,然后进入 OpenWrt 系统源码的顶层目录,执行 make menuconfig。
# cd /work/openwrt/trunk/ # make menuconfig
在弹出的菜单选项中,首先进入 Utilities 选项。
接着我们就能看到我们自己写的应用程序的选项 f403tech_drv_test,将该选项配置进系统,即选为*.
接下来,退出保存,并重新编译系统。
# make V=99
编译完成以后,新生成的固件里面,就已经包含了我们的应用程序了。
18.4 测试
然后将前面编译出来的驱动模块软件包也传入到开发板。接下来就开始测试。
1). 安装驱动程序
# opkg install kmod-f403tech_drv_3.10.36-1_ramips_24kec.ipk
# cd lib/modules/3.10.36/
# insmod f403tech_drv.ko
2). 运行测试程序
# cd / # f403tech_drv_test
3). 卸载驱动
# rmmod f403tech_drv
当运行测试程序的时候,我们就能看到驱动中 open、read、write 函数中的调试信息。从而说明应用程序成功的调用了驱动的相应的函数。
参考附件:
上一篇: 漂亮的女同学