• 欢迎访问BruceOu的博客,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏本章吧

《路由器开发-OpenWrt系统开发》第18章 驱动开发之字符设备应用程序

OpenWrt系统开发 BruceOu 1年前 (2020-09-25) 490次浏览 0个评论

sD9DPJ.jpg

开发环境:
主机:Ubuntu14.04
开发板:MT7628
Openwrt:Openwrt15.05

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/MT7628", O_RDWR);
    if (fd < 0)
    {
        printf("Can't open /dev/MT7628\n");
    }
    read(fd, &val, 1);
    write(fd, &val, 1);
    return 0;
}

该应用程序很简单,就是在 main 函数里面依次调用了 open、read、write 三个函数接口。

18.2写Makefile 文件

前面我们写出了应用程序,下来我们就要编译应用程序。首先创建一个MT7628_drv_test 目录,然后进入该目录,再创建一个 src 目录,在 src 目录下新建一个Makefile 文件,内容如下。

CC = gcc
CFLAGS = -Wall
OBJS = MT7628_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

然后将前面写的应用程序MT7628_drv_test.c 复制到该目录下, 接着回到上一级目录,即 MT7628_drv_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:=MT7628_drv_test
PKG_RELEASE:=1
PKG_BUILD_DIR :=(BUILD_DIR)/(PKG_NAME)
include(INCLUDE_DIR)/package.mk
define Package/MT7628_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/MT7628_drv_test/install
(INSTALL_DIR)(1)/usr/sbin
(INSTALL_BIN)(PKG_BUILD_DIR)/MT7628_drv_test (1)/usr/sbin/
endef(eval $(call BuildPackage,MT7628_drv_test))

关于该 Makefile 的语法,在前面的章节中已经讲解过,不再赘述。

18.3 编译应用程序

将MT7628_drv_test 的整个文件传到OpenWrt系统源码的package 目录下,然后进入 OpenWrt 系统源码的顶层目录,执行 make menuconfig。
$make menuconfig

在弹出的菜单选项中。

Utilities  --->
    <*>MT7628_drv_test

我们就能看到我们自己写的应用程序的选项MT7628_drv_test,将该选项配置进系统,即选为*。接下来,退出保存,并重新编译系统。

$make V=99

编译完成以后,新生成的固件里面,就已经包含了我们的应用程序了。

18.4 测试

然后将前面编译出来的驱动模块软件包也传入到开发板。接下来就开始测试。
1). 安装驱动程序
#opkg install kmod-MT7628_drv_3.18.29-1_ramips_24kec.ipk
#cd lib/modules/3.18.29/
#insmod MT7628_drv.ko

2). 运行测试程序
#cd /
#MT7628_drv_test

3). 卸载驱动
#rmmod MT7628_drv

当运行测试程序的时候,我们就能看到驱动中 open、read、write 函数中的调试信息。从而说明应用程序成功的调用了驱动的相应的函数。


BrueceOu , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:《路由器开发-OpenWrt系统开发》第18章 驱动开发之字符设备应用程序
喜欢 (3)
[支付宝]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址