1.文件结构和在源码中的位置
应用程序一般位于 package/utils目录下面,文件结构如下:
test@test-Inspiron-3670:~/work/openwrt1505_mt7628/package/utils$ tree mydrv_app/
mydrv_app/
├── Makefile
└── src
├── Makefile
└── mydrv_app.cc
2.文件介绍
2.1查看 : cat mydrv_app/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:=mydrv_app
PKG_RELEASE:=1
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
include $(INCLUDE_DIR)/package.mk
define Package/mydrv_app
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/mydrv_app/install
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/mydrv_app $(1)/usr/sbin/
endef
$(eval $(call BuildPackage,mydrv_app))
2.2查看 : cat mydrv_app/src/Makefile
all: mydrv_app
OBJS = mydrv_app.o
CC = gcc
CCFLAGS = -Wall -c -o
%.o: %.c
$(CC) $(CCFLAGS) $@ $< $(LDFLAGS)
fbtest: $(OBJS)
$(CC) -o $@ $(OBJS) $(LDFLAGS)
clean:
rm -f rbcfg *.o
2.3查看驱动源码cat mydrv_app/src/mydrv_app.c
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
int main(int argc , char** argv)
{
int fd;
int num = 1;
//打开驱动模块
fd = open("dev/mydrv" , O_RDWR|O_NONBLOCK);
if(fd < 0)
{
printf("can't open /dev/mydrv\n");
return -1;
}
//函数测试
write(fd,&num,1);
read(fd,&num,1);
ioctl(fd,1,1);
close(fd);
return 0;
}
3.配置编译 make menuconfig,选Y
make menuconfig —>Utilities -->mydrv_app
4.编译安装
编译:
make package/utils/mydrv_app/compile V=99
make package/utils/mydrv_app/install V=99
make package/index V=99
编译没有出现 Error 即表示完成,编译后的固件存放在目录:
bin/ramips/packages/base/mydrv_app_1_ramips_24kec.ipk
发送到开发板
scp bin/ramips/packages/base/mydrv_app_1_ramips_24kec.ipk root@192.168.1.110:/my_dir/
安装:进入开发板 mkdir
okkg install mydrv_app_1_ramips_24kec.ipk
本实验可能遇到的问题:
opkg install xxx.ipk 时提示:
satisfy_dependencies_for: Cannot satisfy the following dependencies for xxx
问题原因:openwrt 分为两个版本,一个是 trunk 版本,一个是 backfire 版本,我们
用的是 trunk 版本,即测试版本,这个版本每天都在更新;这个错误是因为 openwrt 版本
和 ipk 模块版本不相同导致的!
解决方法:
方法一 把驱动程序软件包或者应用程序软件包(即 ipk 模块)编译到openwrt 中形成相同
版本。
方法二 尝试强制安装:opkg install xxx.ipk --force-depends