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