我的环境
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下生成相应的头文件和库文件
上一篇:交叉编译ARM版 Qt (qt-everywhere-opensource-src-4.8.4)
下一篇:opencv2.2 交叉编译 及在arm开发板测试
推荐阅读最新更新时间:2024-11-13 14:42
设计资源 培训 开发板 精华推荐
- 使用 NXP Semiconductors 的 XC68HC705X4 的参考设计
- LT6654BHLS8-2.5 升压输出电流电压基准的典型应用
- LTC1733,用于 4.1V 或 4.2V 电池的完整 1.5A 单节锂离子充电器
- LTC3566 的典型应用 - 高效率 USB 电源管理器加上 1A 降压-升压转换器
- TL494脉宽调制推挽转换器的典型应用
- HI-8476EV、HI-8476 ARINC 429 接收器,带并行和串行输出评估板
- 使用 Infineon Technologies AG 的 OM8503SF 的参考设计
- 使用 Analog Devices 的 LTC3130IUDC 的参考设计
- LT1071 电流升压型升压转换器的典型应用
- ADR395A 5 Vout 微功率、低噪声精密电压基准的典型应用
- 如何在FPGA设计环境中加时序约束
- 4月25日上午10:00-11:30 ADI与您相约 TOF (Time Of Flight) 技术介绍及产品应用 有奖直播
- 全球首款Cortex-M23内核物联网芯片SAML10和SAM L11系列 闯关获取SAML10/SAML11法宝,拆除电子界安全危机,赢好礼!
- 了解PI高性能AC-DC产品,答题赢好礼
- vishay消费知识大闯关正式开始
- 【MPS有奖分享】便携式多功能电工台的核“芯”功能测试与结构设计
- TI有奖直播:伺服驱动器中电流和电压测量解决方案
- 有奖直播:Microchip适用于CryptoAuthentication™系列的可信任平台
- 995美元Spartan6开发板,花落谁家?