OpenCV移植到ARM 全过程

发布者:火星最新更新时间:2022-05-31 来源: eefocus关键字:OpenCV  移植  ARM 手机看文章 扫描二维码
随时随地手机看文章

我的环境

Host:VMware + Ubuntu 10.04
Target:Real6410 with Linux 2.6.38
Crossing Compiler:arm-linux-gcc 4.4.3 


一  交叉编译链的安装
1    解压,即可得到 arm-none-linux-gnueabi 目录
# tar –xjvf arm-none-linux-gnueabi-4.3.2.tar.bz2
2 为了使用方便,
还可以编辑/etc/bash.bashrc    文件添加把编译器路径到环境变量 PATH    中 ,
  只要在这个文件中添加下面这 2 个语句即可:
PATH=/root/ arm-none-linux-gnueabi-4.1.0/bin:$PATH
export PATH
3    编辑完毕后使用 source /etc/bash.bashrc 命令执行以下这个文件,让设置生效,之后再输
入:
# arm-none-linux-gnueabi-gcc -v
如果输出下面的信息则表面设置成功:
Using built-in specs.
Target: arm-none-linux-gnueabi
Configured with: /scratch/julian/lite-respin/linux/src/gcc-4.3/configure --build=i686-pc-
linux-
gnu --host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi --enable-threads --disable-
libmudflap --disable-libssp --disable-libstdcxx-pch --with-gnu-as --with-gnu-ld --enable-
languages=c,c++ --enable-shared --enable-symvers=gnu --enable-__cxa_atexit --with-
pkgversion='Sourcery G++ Lite 2008q3-72' --with-
bugurl=https://support.codesourcery.com/GNUToolchain/ --disable-nls
--prefix=/opt/codesourcery
--with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc --with-build-
sysroot=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/libc --with-
gmp=/scratch/julian/lite-respin/linux/obj/host-libs-2008q3-72-arm-none-linux-gnueabi-
i686-pc-
linux-gnu/usr --with-mpfr=/scratch/julian/lite-respin/linux/obj/host-libs-2008q3-72-arm-
none-
linux-gnueabi-i686-pc-linux-gnu/usr --disable-libgomp --enable-poison-system-directories
--with-
build-time-tools=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/ bin --with-
build-
time-tools=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/bin
Thread model: posix
1OpenCV移植到ARM    全过程 by Ken Cheung  2010-7-23
gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72)
至此交叉编译链安装完成。

二 交叉编译libjpeg
为了使OpenCV能处理jpeg图像,我们必须事先交叉编译好libjpeg
这里使用的版本是jpegsrc.v6b
1 下载libjpeg源码:ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz
2 解压进入目录
3 配置
#./configure --prefix=/root/libjpeg-arm --exec-prefix=/root/libjpeg-arm --enable-shared
--enable-static
 
下面分别介绍这几个参数的作用:
 
 --prefix=/root/libjpeg-arm : 执行make install 后,会将与体系无关的文件拷贝到此目录下,具
体如下:
 /root/libjpeg-arm.....................................
        |
       +---include........................................
             |
             ---jconfig.h
             |
             ---jerror.h
             |
             ---jmorecfg.h
             |
             ---jpeglib.h
       +---man............................................
             |
            +---man1.......................................
                  |
                  ---cjeg.1
                  |
                  ---djpeg.1
                  |
                  ---jpegtran.1
                  |
                  ---rdjpgcom.1
                  |
                  ---wrjpgcom.1
              
 --exec-prefix=/root/libjpeg-arm : 执行make install 后,会将与体系无关的文件拷贝到此目录
下,即将一些可执行程序、动态链接库和静态链接库拷贝到此目录的相应目录下,具体如下:
2OpenCV移植到ARM    全过程 by Ken Cheung  2010-7-23
 /root/libjpeg-arm........................................
        |
       +---bin............................................
             |
             ---cjeg
             |
             ---djpeg
             |
             ---jpegtran
             |
             ---rdjpgcom
             |
             ---wrjpgcom
       +---lib...........................................
             |
             ---libjpeg.la
             |
             ---libjpeg.so
             |
             ---libjpeg.so.62
             |
             ---libjpeg.so.62.0.0
          
 --enable-shared : 用GNU libtool   编译成动态链接库 。
4 修改生成的Makefile文件:
       # The name of your C compiler:
       CC= gcc     该成  CC= /root/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-gcc
(根据你自己交叉编译器的位置修改)
       # library (.a) file creation command
       AR= ar rc    该成  AR= /root/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-ar rc
 (同上)
       # second step in .a creation (use "touch" if not needed)
       AR2= ranlib    该成  AR2= /root/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-
ranlib (同上)
5 在/root/libjpeg-arm   目录下建立 man/man1,include,lib,bin四个目录
6 # make
   # make install
7 将/root/libjpeg-arm/include/中(jconfig.h, jerror.h, jmorecfg.h, jpeglib.h)四个头文件拷
贝到:/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/include中。
   将/root/libjpeg-arm/lib中(libjpeg.la, libjpeg.so, libjpeg.so.62, libjpeg.so.62.0.0)四个库
文件拷贝到:/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/lib中
注意:执行以下命令检查生成的libjpeg.so是否为ARM版:
3OpenCV移植到ARM    全过程 by Ken Cheung  2010-7-23
# file libjpeg.so
以下为正确输出,否则检查交叉编译器路径以及Makefile并重新编译。
注意:执行完以上操作后执行以下命令检查库文件是否已正确安装:
# arm-linux-gcc -print-file-name=libjpeg.so
如果输出为"libjpeg.so"则说明没有正确安装,重复7步骤。
如果输出为"DIR/libjpeg.so"则说明安装正确。
至此libjpeg交叉编译完成。

三 交叉编译 x264,xvid,ffmpeg
    为了使OpenCV能处理视频,我们要事先交叉编译ffmpeg,而ffmpeg又是依赖x264和
xvid的。
1 下载yasm:
到 http://www.tortall.net/projects/yasm/wiki/Download 下载yasm0.7.2(x264需要用
到的汇编编译器)
# ./configure --enable-shared --prefix=/root/arm-none-linux-gnueabi/arm-none-linux-
gnueabi/ --host=arm-linux
# make
# make install
2 交叉编译x264
  到 ftp://ftp.videolan.org/pub/videolan/x264/snapshots/ 下载x264-snapshot-20060805-
2245.tar.bz2,解压进入目录
(1).配置
# ./configure --prefix=/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/  --enable-
shared 
(2).   修改配置参数  
修改config.mak:
prefix=/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/
exec_prefix=${prefix}
bindir=${exec_prefix}/bin
libdir=${exec_prefix}/lib
includedir=${prefix}/include
# 这里改为ARM
ARCH=ARM
SYS=LINUX
# 这里改为arm-linux-gcc
CC=arm-linux-gcc
# 这里去掉-DHAVE_MMXEXT -DHAVE_SSE2 -DARCH_X86
CFLAGS=-Wall -I. -O4 -ffast-math -D__X264__ -DHAVE_MALLOC_H -DSYS_LINUX
-DHAVE_PTHREAD -s -fomit-frame-pointer
LDFLAGS= -lm -lpthread -s
AS=nasm
4OpenCV移植到ARM    全过程 by Ken Cheung  2010-7-23
ASFLAGS=-O2 -f elf
VFW=no
GTK=no
EXE=
VIS=no
HAVE_GETOPT_LONG=1
DEVNULL=/dev/null
CONFIGURE_ARGS= '--enable-shared' '--prefix=/root/arm-none-linux-gnueabi/arm-
none-linux-gnueabi/'
SONAME=libx264.so.49
default: $(SONAME)
 
修改Makefile,将66~68行的ar和ranlib改为arm下的:
 
libx264.a: .depend $(OBJS) $(OBJASM)
                arm-linux-ar rc libx264.a $(OBJS) $(OBJASM)
                arm-linux-ranlib libx264.a
 
(3).编译安装
 
# make
# make install 
这里可以在交叉编译链目录/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/的
lib下生成libx264.so
3 交叉编译xvid
  到 http://downloads.xvid.org/downloads/xvidcore-1.1.3.tar.gz  下载xvid
下载xvid解压并进入build/generic
配置
# ./configure --prefix=/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/ --disable-
assembly
    [解释]--disable-assembly :因为xvid没有针对ARM的汇编优化,所以编译时必须关掉汇编修改Makefile引用的platform.inc文件,将CC=gcc改为CC=arm-linux-gcc
# make
# make install
成功后进入example文件夹
测试,输入
arm-linux-gcc -o xvid_encraw xvid_encraw.c  -lc -lm -I../src/ -L../build/generic/=build
5OpenCV移植到ARM    全过程 by Ken Cheung  2010-7-23
-lxvidcore
即可生成xvid_encraw
这里可以在交叉编译链目录/root/arm-none-linux-gnueabi/arm-none-linux-gnueabi/的
include,lib下生成相应的头文件和库文件

[1] [2]
关键字:OpenCV  移植  ARM 引用地址:OpenCV移植到ARM 全过程

上一篇:交叉编译ARM版 Qt (qt-everywhere-opensource-src-4.8.4)
下一篇:opencv2.2 交叉编译 及在arm开发板测试

推荐阅读最新更新时间:2024-11-13 14:42

skyeye上的s3c2410 lcd移植
今天终于把s3c2410的lcd在skyeye上搞出来了。看到网上还有朋友在发贴询问,所以在这里与大家分亨一下。 首先,我的skyeye是1.2.3版的,linux内核版本是2.6.16.21-0.8 ,suse 10.0自带的。u-boot-1.1.6为引导程序。u-boot在skyeye 上的移植网上有,我也是在网上学来的,如果你还不清楚,可以到网上google一下。具体的地址我也不记得了。 下面主要说下我自己在skyeye上移植s3c2410的经历。 先声明一下本人也是初学者,有很多东西都 不是很清楚。在配置内核的时候l看到 linux2.6 自带了s3c2410的驱动,以为只要把它编译进 内核就可以了,可是
[单片机]
skyeye上的s3c2410 lcd<font color='red'>移植</font>
基于ARM的液压系统智能数据采集终端硬件设计
  针对液压系统的特点,设计了基于ARM 的智能数据采集终端系统。该系统通过传感器对油压、流量和温度3 类信号进行采集,调理后的数据经过ARM 处理器S3C2440 进行处理和压缩,压缩后的数据利用GTM900C 无线传输模块远程传输。整个系统硬件电路分为主控电路部分、数据采集部分和无线传输部分。   液压系统具有功率大、响应快及精度高等特点,已经广泛应用于冶金和制造领域。但其故障又具有隐蔽性、多样性、不确定性及因果关系复杂等特点,故障出现后不易查找原因,而且故障发生会带来巨大的经济损失。通常,液压系统只能靠定期检查和维护来排除故障,这种方法有一定的滞后性。因此需要实时监测液压系统的状态数据并及时分析以减少故障率,确保工程机械正
[单片机]
基于<font color='red'>ARM</font>的液压系统智能数据采集终端硬件设计
ARM32 ARM64 的设备树匹配及兼容ATAGS
arm32 arm64 u-boot 加载 linux的命令 bootm bootm uImage_addr // 无设备树,bootm 0x30007FC0 bootm uImage_addr initrd_addr dtb_addr // 有设备树 --- nand read.jffs2 0x30007FC0 kernel; // 读内核uImage到内存0x30007FC0 nand read.jffs2 32000000 device_tree; // 读dtb到内存32000000 bootm 0x30007FC0 - 0x32000000 // 启动, 没有
[单片机]
嵌入式arm学习总结(七)--中断-基于S3C2440
1.中断执行过程 1)保存中断前PC值 2)保持中断前CPSR到spsr 3)修改CPSR的相应值,进入相应异常模式 4)执行异常 5)现将SPSR还原到CPSR 6)还原PC ARM硬件不支持相同异常中断嵌套 如果相同异常嵌套,必须通过软件来保存CPSR和PC的值 不同异常中断硬件支持嵌套 2.s3c2440的中断 共60个终端源,有五种中断触发方式 3.ARM中断响应过程--详细过程 中断初始化总共分为7步,只要初始化后,只要触发中断,那么程序直接跳入中断服务函数 第一步:配置I/O口为中断功能 第二步:配置外部中断触发模式 第三步: EINTPEND外中断挂起寄存器,清除时要写1相当于为0,清除中断
[单片机]
老查的ARM学习笔记:chapter-3(串口驱动程序分析 )
tty子系统架构概念简述 在Linux系统中,终端是一类字符型设备,它包括多种类型,通常使用tty来简称各种类型的终端设备。 1 串口终端(/dev/ttyS*) 串口终端是使用计算机串口连接的终端设备。Linux把每个串行端口都看作是一个字符设备。这些串行端口所对应的设备名称是/dev/ttySAC0; /dev/ttySAC1…… 2 控制台终端(/dev/console) 在Linux系统中,计算机的输出设备通常被称为控制台终端(Console),这里特指printk信息输出到的设备。/dev/console是一个虚拟的设备,它需要映射到真正的tty上,比如通过内核启动参数” console=ttySAC0”就把co
[单片机]
老查的<font color='red'>ARM</font>学习笔记:chapter-3(串口驱动程序分析 )
[ARM笔记]设备驱动概述
《嵌入式Linux初级实验s3c2410》 设备驱动开发=硬件控制+内核API+内核驱动框架 1. 设备驱动和操作系统 1.1 无操作系统时的设备驱动 在没有操作系统的情况下,设备驱动的接口直接提交给应用软件工程师,应用软件没有跨越任何层次就可以直接访问设备驱动的接口。驱动包含的接口函数也与硬件的功能直接吻合,没有任何附加功能。 1.2 有操作系统时的设备驱动 没有操作系统时,设备驱动直接被应用程序调用,不与任何操作系统关联。当系统中包含操作系统后,设备驱动会变得怎样? 首先,无操作系统时设备驱动的硬件操作仍然是必不可少的,没有这一部分,设备驱动不可能与硬件打交道,也就是说在无操作系统时驱
[单片机]
英特尔比亚迪开始合作:将与ARM激战到底
    目前英特尔在积极和终端OEM厂商接触,希望在2013年拉拢更多的厂商推出产品,目标是锁定更大的合作伙伴。另外,英特尔也开始和比亚迪合作做参考设计方案,这样可以帮助终端厂商更快把产品推向市场。 英特尔必须加快转型步伐了。 当所有人都在谈论PC式微,未来是属于移动的时候,英特尔仅仅靠重构PC显然已经不能赶上时代的需求,它必须跳入移动的浪潮中。 “(在移动市场)我们是新进入者,同时我们也是一个有备而来的挑战者。”4月12日,英特尔产品架构事业部副总裁陈荣坤接受本报专访时承认,英特尔在移动领域给自己的定位是“挑战者”。 在手机芯片市场,高通、三星、联发科等等是盘踞在这个领域的诸侯们,他们同属ARM阵营,覆盖了不同价位的市场空间,各自
[手机便携]
Ubuntu 8.10 下移植 madplay 到 mini2440
在 Ubuntu 8.10 下移植 madplay 到 mini2440过程中同样参考了网上的一篇帖子,由于当时未想到要把过程放到这就没有记录那篇帖子的网址,在此表示感谢! madplay移植记录: 一、PC版的madplay PC版的编译基本同mini2440手册上的一致。 二、ARM版的madplay 1、编译zlib-1.2.3 解压zlib-1.2.3.tar.gz到/opt/FriendlyARM/mini2440/madplay/src-arm/zlib-1.2.3 进入zlib-1.2.3目录 配置configure: sudo gedit configure a、把AR=${AR- ar rc }改为: AR=${
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved