xfOpenCV 是Xilinx针对Opencv做的一个加速库,目前只在支持reVISION的ZCU102平台上做过评估,哪假如其他平台想要使用这个库,我们应该怎么做呢?下面以ZedBoard为例来细说这个过程,由于我的系统是Linux,所以这里主要以命令行的方式来操作。
1、 正确安装Xilinx2017.1,详细过程这里不再赘述
2、下载zcu102_es2_reVISION包,并解压到相应工作目录下,打开命令行输入命令:
export SYSROOT= ${zcu102_es2_reVISION_path}/sw/aarch64-linux-gnu/sysroot
3、下载xfOpencv库,输入命令:
git clone https://github.com/Xilinx/xfopencv.git
4、进入xfopencv/examples目录:cd xfopencv/examples ,该目录的每一个文件夹都是一个加速示例,部分如下所示:
5、进入其中一个示例,如: cd accumulate,该目录文件结构如下所示:
6、修改Makefile文件,把变量PLATFORM修改成 PLATFORM = zed ,保存修改
7、输入命令:make
如果出现“/bin/sh: 1: sds++: not found” 这个错误,说明没有把sds++这个命令加入到环境变量中,手动加一下即可,如:source ${your_xilinx2017.1_path}/sdsoc/SDx/2017.1/settings64.sh 。
如果出现“zcu102_es2_reVISION/sw/aarch64-linux-gnu/sysroot/usr/lib/crt1.o: file not recognized: 不可识别的文件格式” 错误,说明平台是不兼容的,因为zcu102的arm处理器是Cortex-A53,64位架构,而ZedBoard的arm处理器是Cortex-A9,32位架构,所以需要把${zcu102_es2_reVISION_path}/sw/aarch64-linux-gnu/sysroot/usr/lib/ 和 ${zcu102_es2_reVISION_path}/sw/aarch64-linux-gnu/sysroot/usr/lib下所需要用到的库换成32版本的即可。简单做法如下:
1)cd ${zcu102_es2_reVISION_path}/sw/aarch64-linux-gnu/sysroot/
2)cp -r lib lib64 ; cd lib
3)cp -r {yout_xilinx2017.1_path}/sdsoc/SDx/2017.1/SDK/gnu/aarch32/lin/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/libc/lib* .
4)cd ../usr
5)cp -r lib lib64 ; cd lib
6)cp -r {yout_xilinx2017.1_path}/sdsoc/SDx/2017.1/SDK/gnu/aarch32/lin/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/libc/usr/lib* .
7)opencv相应的动态链接库也是64位,因此需要手动生成32位版本的,具体做法参考 http://blog.csdn.net/luotuo44/article/details/8958990
8)将opencv重新生成32位的动态链接库copy过来即可
做完上述修改之后重新编译即可,有个问题需要注意的是,在Makefile文件中,LLIBS变量指定很多链接库(所有示例中这个变量的值都一样,估计是为了偷懒),如“LLIBS = -lopencv_imgcodecs -lopencv_core -llzma -ltiff -lpng16 -lz -ljpeg -lopencv_imgproc -ldl -lrt -lwebp -lopencv_features2d -lopencv_flann ” ,但在本示例中“LLIBS= -lopencv_core -lopencv_imgproc -lopencv_imgcodecs -ldl ” 即可 ,这样可以不用将其他一些不需要的库都转成32位的才能通过编译。
8、将生成的sd_card的所有文件和相关的动态链接库拷贝到sdcard,然后进行测试。