OpenCV移植到OMAP3730平台全过程

1、移植环境说明

宿主机PC,os为ubuntu10.04 ,目标开发板为TI公司的OMAP3730(kernel 2.6.32),我想大致其他ARM架构也一样。


2、移植OpenCV所需的资源包汇总

/root/need_to_cross_compile_version2/
---->jpegsrc.v6b.tar.gz                                            (jpeg函数库)
---->libpng-1.2.18.tar.gz                                         (png函数库库)
---->zlib-1.2.3.tar.gz                                              (z函数库)
---->x264-snapshot-20100410-2245.tar.bz2                     (x264函数库)
---->yasm-0.7.2.tar.gz                                            (汇编编译器,编译x264时需要用到)
---->xvidcore-1.3.2.tar.gz                                       (xvid函数库)
---->ffmpeg-0.5.3.tar.bz2                                       (ffmpeg源码包)
---->OpenCV-2.0.0.tar.bz2                                      (OpenCV源码包)

       /opt/arm-linux-gcc/
---->arm-linux-gcc-4.3.2.tgz                              (交叉编译工具链)
说明:(1)以上资源包中ffmpeg是为了OpenCV能够处理视频,而ffmpeg依赖于x264和xvid两个库,而交叉编译libx264时需要用到汇编编译器yasm。

3、安装交叉编译器

#tar  -zvxf  arm-linux-gcc-4.3.2.tgz  -C /root/

添加环境变量

#vim  /etc/environment

在路径中添加/root/arm/4.3.2/bin与已有路径用冒号隔开:

刷新环境变量:

#source  /etc/enviroment

4、交叉编译libz

#tar  -zvxf zlib-1.2.3.tar.gz
#cd  zlib-1.2.3
#CC=arm-linux-gcc ./configure  --prefix=/root/arm/4.3.2/arm-none-linux-gnueabi --shared
#make
#make install

5、交叉编译libjpeg

#tar  –zvxf  jpegsrc.v6b.tar.gz   
#cd jpeg-6b
#./configure --prefix=/root/arm/4.3.2/arm-none-linux-gnueabi --enable-shared  --enable-static

修改生成的Makefile文件:

CC=gcc改为CC=arm-linux-gcc

AR=ar rc改为AR=arm-linux-ar rc

AR2=ranlib改为AR2=arm-linux-ranlib

#make

需在/root/arm/4.3.2/arm-none-linux-gnueabi目录下创建/man/man1目录,才能执行安装命令。

#cd  /root/arm/4.3.2/arm-none-linux-gnueabi
#mkdir man
#mkdir man/man1
#cd /root/need_to_cross_compile_version2/libjpeg-6b
#makeinstall

6、交叉编译libpng

#tar –zvxflibpng-1.2.18.tar.gz
#cdlibpng-1.2.18
#./configure--prefix=/root/arm/4.3.2/arm-none-linux-gnueabi--enable-shared --enable-static --host=arm-linux
#make
#make install

7、交叉编译yasm

#tar –zvxfyasm-0.7.2.tar.gz
#cd yasm-0.7.2
#./configure--prefix=/root/arm/4.3.2/arm-none-linux-gnueabi--enable-shared --enable-static --host=arm-linux
#make
#make install

8、交叉编译libx264

#tar –jvxfx264-snapshot-20100410-2245.tar.bz2
#cd x264-snapshot-20100410-2245
#CC=arm-linux-gcc ./configure --enable-shared --host=arm-linux --disable-asm --prefix=/root/arm/4.3.2/arm-none-linux-gnueabi
#make
#make install

9、交叉编译libxvid

#tar –zvxfxvidcore-1.3.2.tar.gz
#cd xvidcore-1.3.2
#./configure--host=arm-linux  --disable-assembly --prefix=/root/arm/4.3.2/arm-none-linux-gnueabi
#make
#make install

10、交叉编译ffmpeg

#tar –jxvf  ffmpeg-0.5.3.tar.bz2
#cd ffmpeg-0.5.3
#./configure--prefix=/root/arm/4.3.2/arm-none-linux-gnueabi--enable-shared --disable-static --enable-gpl --enable-cross-compile --arch=arm--disable-stripping --target-os=linux --disable-ffserver --enable-libx264--enable-libxvid --cc=arm-linux-gcc --enable-swscale

此处将会检测libx264 libxvid安装是否正确,以及版本是否是ffmpeg支持的,配置无误则编译:

#make
#make install

11、交叉编译OpenCV

#tar –jxvfOpenCV-2.0.0.tar.bz2
#cd OpenCV-2.0.0
#vim configure
定位到大概18182行的位置,在“FFMPEGLIBS="-lavcodec -lavformat” 后添加 “-lswscale”, 修改之后变为:“FFMPEGLIBS="-lavcodec -lavformat-lswscale $FFMPEG_SWSCALE_LIBS"”,然后保存退出。

若不修改此信息,OpenCV将不支持libswscale,即无法进行图像格式转换。

# ./configure --host=arm-none-linux-gnueabi--without-gtk --without-carbon --without-quicktime --without-1394libs--with-ffmpeg --without-python --without-swig --enable-static --enable-shared--disable-apps CXX=arm-linux-g++ CPPFLAGS=-I/root/arm/4.3.2/arm-none-linux-gnueabi/include/LDFLAGS=-L/root/arm/4.3.2/arm-none-linux-gnueabi/lib--with-v4l --prefix=/root/arm/4.3.2/arm-none-linux-gnueabi  CXXFLAGS=-O2

若之前的步骤无误,我们将会看到配置信息如下:

Generalconfiguration ================================================ 

    CXX:                     arm-linux-g++ 
    CXXCPP:                  arm-linux-g++ -E 
    CPPFLAGS:                -I/root/arm/4.3.2/arm-none-linux-gnueabi/include/ 
    CXXFLAGS:                -O2 
    LDFLAGS:                 -L/root/arm/4.3.2/arm-none-linux-gnueabi/lib 

    Install path:             /root/arm/4.3.2/arm-none-linux-gnueabi 

    Debug flags                
    Optimization flags        -DNDEBUG -O2-fomit-frame-pointer 
    MMX/SSE/SSE2/SSE3:         
    OpenMP support:            
    External BLAS & LAPACK:   no 

HighGUI configuration ================================================ 


    Windowing system -------------- 
    Use Carbon / Mac OS X:    no 
    Use gtk+ 2.x:            no 
    Use gthread:             no 

    Image I/O --------------------- 
    Use ImageIO / Mac OS X:   no 
    Use libjpeg:             yes 
    Use zlib:                yes 
    Use libpng:              yes 
    Use libtiff:             no 
    Use libjasper:            no 
    Use libIlmImf/OpenEXR:    no 

    Video I/O --------------------- 
    Use QuickTime / Mac OS X: no 
    Use xine:                no 
    Use gstreamer:            no 
    Use ffmpeg:              yes 
    Use dc1394 & raw1394:     no 
    Use dc1394_v2 & raw1394:  no 
    Use v4l:                 yes 
    Use v4l2:                yes 
    Use unicap:              no 

Wrappers for other languages ========================================= 

    SWIG                      
    Python                   no 
    Octave                   no 

Additional build settings ============================================ 

    Build demo apps           no 

Now run make ... 
======================================================================

确认以上库都支持,则进行编译,安装:

#make
#make install

12、将交叉编译好的库文件拷贝到开发板

通过NFS服务器将/root/arm/4.3.2/arm-none-linux-gnueabi/lib目录下生成的所有库文件拷贝到开发板的/lib目录下,若拷贝至其他目录则需指定LD-LIBRARY-PATH,/lib目录则可避免此问题。具体操作如下:

#cp /root/arm/4.3.2/arm-none-linux-gnueabi/lib/lib*/root/worknfs/arm-opencv-2.0

Windows下ZOC超级终端以root用户登录,执行如下操作:

#ifconfig eth0 10.10.204.211
#mkdir /mnt/nfs
#mount –tnfs –o nolock 10.10.204.210:/root/worknfs /mnt/nfs
#cp /mnt/nfs/arm-opencv-2.0/lib*  /lib

至此OpenCV2.0及其依赖库已成功移植到Omap3730开发板。

13、编写测试程序arm_save_camera.c,验证移植是否成功,交叉编译:

# arm-none-linux-gnueabi-gcc -o arm_save_camera arm_save_camera.c -I /root/arm/4.3.2/arm-none-linux-gnueabi/include/opencv-L /root/arm/4.3.2/arm-none-linux-gnueabi/lib -lcv -lhighgui -lcvaux -lrt-lpthread -lm -lml -lz -ldl -ljpeg -lpng -lcxcore

将交叉编译好的程序拷贝到开发板上运行,便可通过摄像头拍摄并保存视频sister.avi,将视频文件拷贝的宿主机可以播放,说明OpenCV移植以及完成。

如若转载请注明出处:http://blog.csdn.net/embedded_sky/article/details/20475837

作者:super_bert@csdn

猜你喜欢

转载自blog.csdn.net/qq302501035/article/details/20475837