9.openwrt 应用程序编写原型

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值