刚接触XILINX的ZYNQ板,刚接触没有十天。XILINX定位它为SOC,我也很认同,起码比TI定位MPU为SOC强很多。据说今年TI的最新产品也加入了ZYNQ板。
之前的MIPS处理器设计与实现的项目就算做告一段落,搞了将近7个月,成果显著,收获颇多,最近打算搞搞ZYNQ。
之前MIPS也有一套交叉编译工具,不过是老师提供的,自己也尝试搞了搞,太辛苦了,而且也没什么成果,因为我们需要LITE版的MIPS指令集。
这次不一样,ZYNQ集成了两个ARM cortex-A9处理器,可以支持thumb指令集以及arm指令集,所以这方面的交叉编译我本以为会很容易,谁知道依旧搞了很久。
主机平台:Ubuntu12.04LTS x86-32bit(我装的是双系统,没有在虚拟机下运行,真心不推荐在虚拟机下运行,太慢了)
目标平台:linaro(Ubuntu11.04貌似) ARM(Xilinx Zedboard)
由于OpenCV默认下只支持AVI标准格式的打开与写入,因此需要添加很多解码与编码库的交叉编译库等文件,包括jpeg、png等等。因此,大体流程是先对需要支持的库进行交叉编译,再对OpenCV进行交叉编译并添加相应的库支持。依赖关系如下:
安装完成后,需要导入环境变量,也可以修改bash文件(不需要每次都导入环境变量),指令如下:
export ARCH=arm
export CROSS_COMPILE=arm-xilinx-linux-gnueabi-
export PATH=/root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin/:$PATH
注意:$PATH 千万不要输入错误,否则会运行不了很多命令,也可以输入
gedit /etc/bash.bashrc
如图所示,添加以下内容
保存并关闭gedit,然后输入
source /etc/bash.bashrc使当前设置立即生效,
可以通过输入echo $PATH命令检查环境变量是否设置正确,如下图:
可以,编译C文件进行测试,
使用gedit在任意目录下编辑hello.c文件如图所示,保存后进入终端。
以root身份进入到当前目录下,输入arm-xilinx-linux-gnueabi-gcc -o hello hello.c命令(该命令root身份有效)
生成hello可执行文件,输入file hello命令,hello文件信息如下,显示arm可执行文件。
此时证明arm-xilinx交叉编译工具安装正确无误,进入下一步。
在此之前建议,添加环境变量用于简单表示交叉编译库存放路径,每次启动终端都需要输入此命令
export ZYNQ_CV_BUILD=/opt/opencv/opencv-lib
使用echo $ZYNQ_CV_BUILD命令检验是否添加环境变量,再开始对依赖库的编译。
2.依赖库的交叉编译
对于依赖库的编译,都需要进行配置,当发生配置错误时可使用./configure --help命令查看帮助,以及阅读相应log文件查看编译出错原因。切记需要按照顺序编译,并且一定注意版本一致。
(1)zlib-1.2.7
由于zlib中没有--host选项,所以需要预先声明cc变量
unzip zlib127.zip
cd zlib-1.2.7
export CC=arm-xilinx-linux-gnueabi-gcc
./configure --prefix=$ZYNQ_CV_BUILD --shared
make
make install
然后,可进入$ZYNQ_CV_BUILD/lib目录下检查是否已编译ARM环境的zlib库
cd $ZYNQ_CV_BUILD/lib
ls
file libz.so.1.2.7
如下图所示,则表明成功编译arm所需库文件,以下依赖库均可采用此种检查方式,故略去。
(2)jpeg-8d
tar -xzvf jpegsrc.v8d.tar.gz
cd jpeg-8d
./configure --prefix=$ZYNQ_CV_BUILD --host=arm-xilinx-linux-gnueabi --enable-shared
make
make install
(3)libpng-1.5.14
libpng编译时需要zlib库的内容,所以需要LDFLAGS以及CFLAGS变量声明。
tar -xzvf libpng-1.5.14.tar.gz
cd libpng-1.5.14
./configure --prefix=$ZYNQ_CV_BUILD --host=arm-xilinx-linux-gnueabi
--with-pkgconfigdir=$ZYNQ_CV_BUILD/lib/pkgconfig LDFLAGS=-L$ZYNQ_CV_BUILD/lib
CFLAGS=-I$ZYNQ_CV_INSTALL/include
make
make install
(4)x264-snapshot-20120528-2245-stable
tar -xjvf x264-snapshot-20120528-2245-stable.tar.bz2
cd x264-snapshot-20120528-2245-stable
./configure --host=arm-linux --cross-prefix=arm-xilinx-linux-gnueabi- --enable-shared --prefix=$ZYNQ_CV_BUILD
make
make install
(5)xvidcore-1.3.2
注意此处一定要禁止汇编。
tar -xzvf xvidcore-1.3.2.tar.gz
cd xvidcore/build/generic // 注意该依赖库configure在build/generic/目录下
./configure --prefix=$ZYNQ_CV_BUILD --host=arm-xilinx-linux-gnueabi --disable-assembly
make
make install
(6)tiff-4.0.3
同理,需要添加zlib支持,因此需要声明LDFLAGS和CFLAGS变量。
tar -xzvf tiff-4.0.3.tar.gz
cd tiff-4.0.3
./configure --prefix=$ZYNQ_CV_BUILD --host=arm-xilinx-linux-gnueabi --enable-shared
LDFLAGS=-L$ZYNQ_CV_BUILD/lib CFLAGS=-I$ZYNQ_CV_BUILD/include
make
make install
(7)ffmpeg-0.10.3
ffmpeg的配置选项较多,需要添加cflas和ldflags声明。
tar -xjvf ffmpeg-0.10.3.tar.bz2
cd fmpeg-0.10.3
./configure --prefix=$ZYNQ_CV_BUILD --enable-shared --disable-static --enable-gpl --enable-cross-compile --arch=arm
--disable-stripping --target-os=linux --enable-libx264 --enable-libxvid --cc=arm-xilinx-linux-gnueabi-gcc --enable-swscale
--extra-cflags=-I$ZYNQ_CV_BUILD/include --extra-ldflags=-L$ZYNQ_CV_BUILD/lib --disable-asm
make
make install
3. OpenCV2.4.3交叉编译过程
OpenCV的安装相对容易,编译前需要安装cmake以及cmake-gui配置工具。其实该配置过程与windows下很相似,只是需要修改一些路径以及选项,并制定编译器。
sudo apt-get install cmake cmake-gui
解压OpenCV源代码
tar -xzvf opencv-2.4.3.tar.bz2
进入源代码,建立build文件夹(此步骤一定需要建立一个文件夹)
cd OpenCV-2.4.3
mkdir buid
cd build
gedit toolchain.cmake
利用新建toolchain.cmake文件,并添加如下内容: