文档章节

玩转智能路由器-WRTnode添加OpenCV支持

openthings
 openthings
发布于 2015/03/04 16:42
字数 1045
阅读 965
收藏 9

opencv libs库文件ipk编译

opencv ipk源码

利用openwrt package的编译机制仅仅需要一个Makefile即可编译opencv。

为何会如此简单神奇,下面就对Makefile详解(个人看法,欢迎指正):

$vim Makefile

include $(TOPDIR)/rules.mk 
PKG_NAME:=opencv 
# PKG_NAME -软件包的名字, 在 menuconfig 和 ipkg 显示
PKG_VERSION:=2.4.8 
# PKG_VERSION -软件包的版本,主干分支的版本正是我们要下载的
PKG_RELEASE:=1 
# PKG_RELEASE -这个 makefile 的版本
PKG_USE_MIPS16:=0 
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).zip 
# PKG_SOURCE -要下载的软件包的名字,一般是由 PKG_NAME 和 PKG_VERSION 组成
PKG_SOURCE_URL:=http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.8/ # PKG_SOURCE_URL -下载这个软件包的链接 ,从网上得到的
PKG_MD5SUM:=50cc1433b3654074206f5b3dbfd49848 
##################################################
# 软件包的 MD5 值,校验值,得到MD5的值的方法
#$ ./scripts/update-package-md5sum ....../opencv/
#PKG_CAT:= unzip
#PKG_CAT -解压软件包的方法 (zcat, bzcat, unzip)
##################################################
include $(INCLUDE_DIR)/package.mk 
include $(INCLUDE_DIR)/cmake.mk 
define Package/opencv/Default/description 
the Open Source Computer Vision Library for linux 
endef 
define Package/opencv 
  SECTION:=libs 
  CATEGORY:=Libraries 
  TITLE:= opencv-2.4.8 
  DEPENDS:=+libpthread +librt +libstdcpp +zlib +libjpeg 
endef 
##################################################
#SECTION - 软件包类型 
#CATEGORY - menuconfig中软件包所属的一级目录,如 Libraries
#SUBMENU - menuconfig中软件包所属的二级目录(没有用到)
#TITLE - 软件包标题
#DESCRIPTION - 软件包的详细说明
#URL - 软件的原始位置,一般是软件作者的主页
#MAINTAINER - (optional) 软件包维护人员
#DEPENDS - (optional) 依赖项,运行本软件依赖的其他包
#################################################
PKG_INSTALL:=1 
CMAKE_OPTIONS += -DWITH_LIBV4L:BOOL=OFF -DBUILD_opencv_ts:BOOL=OFF
#################################################
#CMAKE_OPTIONS 
#例如不想编译libv4l库、ts等,就选择OFF。
#################################################
define Build/InstallDev 
    $(INSTALL_DIR) $(1)/usr/include 
    $(CP) $(PKG_INSTALL_DIR)/usr/include/opencv $(1)/usr/include/ 
    $(CP) $(PKG_INSTALL_DIR)/usr/include/opencv2 $(1)/usr/include/ 
    $(INSTALL_DIR) $(1)/usr/lib 
    $(CP) $(PKG_INSTALL_DIR)/usr/lib/libopencv* $(1)/usr/lib/ 
endef 
#################################################
# define Build/InstallDev 
#生成的头文件和库放到  
#./staging_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/usr/include 和 ./staging_dir/target- mipsel_24kec+dsp_uClibc-0.9.33.2/usr/lib 下
#PKG_INSTALL_DIR  ./trunk/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/opencv-2.4.8/ipkg-install 
#################################################
define Package/opencv/install 
    $(INSTALL_DIR) $(1)/usr/include 
    $(CP) $(PKG_INSTALL_DIR)/usr/include/* $(1)/usr/include/ 
    $(INSTALL_DIR) $(1)/usr/lib 
    $(CP) $(PKG_INSTALL_DIR)/usr/lib/libopencv* $(1)/usr/lib/ 
endef 
$(eval $(call BuildPackage,opencv))
#################################################
#这是最为关键的BuildPackage宏。它是在$(INCLUDE_DIR)/package.mk文件里定义的。BuildPackage宏只要求 一个参数,即要编译的软件包名,在本例中是"opencv"。所有其他信息都通过宏来获得,这提供了一种内在的简洁性。比如BuildPackage需要软件包的一大串描述信息,我们并不要向它传递冗长的参数,因为我们已经约定描述信息定义在DESCRIPTION宏,BuildPackage从里面读取 就可以了。
# Build/Compile (可选) 
# 编译源代码命令
# Package/install 
# 软件安装命令,主要是把相关文件拷贝到指定目录,如配置文件。 
#################################################

opencv测试程序的编译

opencv-test ipk源码

下面我们利用opencv-test这个demo来测试opencv libs。测试程序实现功能是从摄像头读取图片,保存在当前目录。由于存储空间受限,就存6张图片。 下面是生成opencv-test ipk包所需要的Makefile,其编译方法与其他任何ipk包的编译方法完全一样。

$vim Makefiel

include $(TOPDIR)/rules.mk
PKG_NAME:=opencv-test
PKG_RELEASE:=1
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)/ipkg-install
include $(INCLUDE_DIR)/kernel.mk
include $(INCLUDE_DIR)/package.mk
define Package/opencv-test
  SECTION:=wrtnode
  CATEGORY:=WRTnode
  SUBMENU :=demos
  TITLE:=opencv demo app
  DEPENDS := +opencv
endef
#################################################
#DEPENDS := +opencv ,依赖opencv lib
#################################################
define Package/opencv-test/description
        WRTnode test program for opencv lib
endef
define Build/Prepare
        mkdir -p $(PKG_BUILD_DIR)
        $(CP) ./src/* $(PKG_BUILD_DIR)/
endef
define Build/Compile
        $(MAKE) -C $(PKG_BUILD_DIR) \
                $(TARGET_CONFIGURE_OPTS) CFLAGS="$(TARGET_CFLAGS)" \
                        LDFLAGS="$(TARGET_LDFLAGS)"
endef
#################################################
#$(TARGET_CONFIGURE_OPTS) 、$(TARGET_CFLAGS)、 $(TARGET_LDFLAGS)等定义在rules.mk 
#################################################
define Package/opencv-test/install
        $(INSTALL_DIR) $(1)/usr/bin
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/cv_test $(1)/usr/bin/
endef
#################################################
#cv_test 编译生成的可执行文件
#################################################
$(eval $(call BuildPackage,opencv-test))

而opencv-test的源码和编译二进制代码的Makefile在src目录下,有兴趣的同学可以深入研究。

备注:opencv应用程序几乎可以认为是跨平台的,我们可以在x86的windows或Mac下面进行开发,将与图形窗口显示和键盘输入等OpenWrt不能支持的代码去掉以后,即可保证在WRTnode上顺利编译通过并执行。


本文转载自:http://wiki.wrtnode.com/index.php?title=OpenWrt_package_method/zh-cn

openthings
粉丝 320
博文 1129
码字总数 675031
作品 1
东城
架构师
私信 提问
WRTnode硬件 www.wrtnode.com

45mm*50mm MTK MT7620N 600MHz MIPS CPU (MIPS24KEc) 512Mbit DDR2 ram 128Mbit SPI Flash rom 300Mbit/s Wi-Fi 2T2R 802.11n 2.4 GHz 23GPIOs JTAG SPI UART Lite USB2.0 HOST WRTnode软件 ......

simpower
2014/10/23
567
0
玩转智能路由器-WRTnode开发板[快速入门]

WRTnode是采用OpenWRT的智能路由器开发板,可以运行完整的Linux内核和无线路由器协议栈。 拿到板子后,通过MicroUSB接上 5V电源(移动电源也可以哟),进行简单的配置就可以使用了,还可以级...

openthings
2015/02/27
3.4K
0
玩转智能路由器-WRTnode开发板[TTL刷机救砖]

TTL刷机(原文:http://wiki.wrtnode.com/index.php?title=SavingyourWRTnode/zh-cn) 刷机所需设备:WRTnode核心板,WRTnode底板(或是手工制作的网线),USB转串口模块,杜邦线,USB电源线等...

openthings
2015/02/27
3.7K
0
玩转智能路由器-WRTnode开发板[刷新固件]

WRTnode的固件更新方法 刷机乐趣尽在其中,但乐趣与风险并存。 一:准备固件 参见编译WRTnode固件,如果不想自己编译,可以直接下载WRTnode出厂固件,linux内核 3.10.44;或者是更新版固件,l...

openthings
2015/02/27
901
0
玩转智能路由器-WRTnode开发板[U-boot使用]

WRTnode的U-boot使用方法 注:由于uboot里对gpio1和gpio2的特殊定义,因此我们在使用WRTnode核心板时不要碰触这两个针脚。 点击下载uboot.bin 特点:支持网页刷新固件及uboot;支持U盘启动;...

openthings
2015/02/27
801
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring boot 静态资源访问

0. 两个配置 spring.mvc.static-path-patternspring.resources.static-locations 1. application中需要先行的两个配置项 1.1 spring.mvc.static-path-pattern 这个配置项是告诉springboo......

moon888
今天
3
0
hash slot(虚拟桶)

在分布式集群中,如何保证相同请求落到相同的机器上,并且后面的集群机器可以尽可能的均分请求,并且当扩容或down机的情况下能对原有集群影响最小。 round robin算法:是把数据mod后直接映射...

李朝强
今天
4
0
Kafka 原理和实战

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/bV8AhqAjQp4a_iXRfobkCQ 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班)。先后从事过电子商务、开放平...

vivo互联网技术
今天
19
0
java数据类型

基本类型: 整型:Byte,short,int,long 浮点型:float,double 字符型:char 布尔型:boolean 引用类型: 类类型: 接口类型: 数组类型: Byte 1字节 八位 -128 -------- 127 short 2字节...

audience_1
今天
9
0
太全了|万字详解Docker架构原理、功能及使用

一、简介 1、了解Docker的前生LXC LXC为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。相当于C++中的NameSpa...

Java技术剑
今天
27
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部