ubuntu16.04,zed7020,sdsoc,xfOpenCV,arm-linux,OpenCV3.4.1

一、按照https://www.cnblogs.com/tsfh/p/9184621.html 安装Sdx IDE 2017.4一直到第5步;

二、但第5步时出现问题:

可以看到什么都没有输出,即使运行我生成好的./sdx_hello.elf依旧不会正常输出。/mnt下也没有看到挂载的SD卡,但SecureCRT却可以检测到SD卡,但并不是ttyusb0而是ttyacm0!!但去windows下面是可以跑起来的!!!!可是回ubuntu无论是用SecureCRT还是putty还是不行啊?!别人的都是ttyCOM0,我的是ttyACM0,是这个原因吗?

然后我试了官网的颜色空间转换的例子,在ubuntu下生成sd_card,拷到SD卡,然后去windows下跑起来:

至于ubuntu下SecureCRT或者putty下检测到这块板子却跑不起来的原因,目前没找到?

 

三,看ug1167 ug1235sdsoc-optimization-guide.pdf

ug1167文档中说:xfOpenCV是xilinx专门为opencv做的加速库,可以在Sdx中使用,也可以在Vivado HLS中使用。如果想仅仅进行算法仿真、综合得到性能报告或IP core,建议在HLS中使用xfOpenCV库。但xfOpenCV在HLS中使用有四个方面的限制,其中两个方面是:涉及内存映射的函数不行,比如xf::warpaffine();涉及多核集成的函数用不了,比如xf::canny()边缘检测。  如果想要产生bitstream,建议在Sdx中使用xfOpenCV。

ug1235文档我才看到第33页,文中主要围绕图像卷积这个例子给我们讲如何优化。看到“数据访问模式” 优化这一章,发现和以前搞OpenCL在写kernel之前做规划太像了,OpenCL是要合理调配工作组和工作项写出最大并行化的kernel协同完成kernel上的任务。其实Sdsoc上的优化跟这个好像。再次感受到知识之间是有关联的,并不存在那种完全独立于所有学科的知识,我觉得所有知识都是或多或少相互关联的。

 

四、在Sdx上跑一个xfOpenCV示例

本来想按照ug1233那样直接在Sdx ISE提供的xilinx---Sdx Library----install按钮下将xfOpenCV下载下来并跑示例的,但发现这个按钮下载不了。所以我自己手动去Xilinx的github上下载的xfOpenCV,然后将示例新建工程:

可以看到会提示下载的xfOpenCV里的头文件存在类型缩窄的限制,这是stdc++11引起的问题。在compiler后加上 -Wno-narrowing就可以了。接下来:

会报错说:lib/libjpeg.so:file not recognized:不可识别的文件。这是因为zcu102是64位,而zedboard是32位冲突导致,准备按照 :http://www.iot-online.com/IC/embedded/2017/101877484.html 这里所说将64位变成32位,同时OpenCV也要重新交叉编译为32的库:https://blog.csdn.net/luotuo44/article/details/8958990  在configure时候显示cmake error in configuration process,project files may be invalid!  也就是说交叉编译工具不是有效的,在终端查看是否到底有效:  arm-linux-gcc -v  结果显示:未找到命令!所以难怪Cmake使用不了!  解决办法:https://blog.csdn.net/liaoxu02/article/details/52492122  https://blog.csdn.net/fulinus/article/details/8648384  除了在环境变量中添加, 还要在终端添加: export PATH=$PATH:/opt/Xilinx/usr/local/arm/4.3.2/bin  否则总是说未找到命令!!!!!而网上很多都只说在profile中添加实际不是的,超级用户的终端也要这样。然后就可以了:

接下来继续按照那个网址cmake结果后,在新的arm-opencv(自己取的名字)下进行make:出现第1个错误:

解决办法,在这个报错文件同级目录下新建一个config.h文件,内容是:

#ifndef _LINUX_CONFIG_H
#define _LINUX_CONFIG_H
 
#define HAVE_PTHREAD
 
#endif

然后让这个报错文件包含这个config.h文件即可。

继续编译出现第2个错误:原来是在cmake的configure时没有将 BUILD_ZLIB 勾选上,记得要勾选上哦!!!

接着会出现一些警告,警告不是错误我就没有管它们了:

接着出现第3个错误:

去这个报错的softfloat.hpp地方,将所有报错的地方的数字后面加上ULL,比如原来是0xfffffffff,那么就改成0xfffffffffULL。全部都这样修改。即可。

然后继续make,出现第4个错误:

我在想这个错误是因为cmake时BUILD_OPENCL默认勾选了吗?早知道就检查下不要勾选了。于是我又重来一遍cmake编译那里,并将所有与OPENCL相关的地方取消勾选!终于不再报上面那个错了,但是编译到43%时另一个地方报错了:在smooth.cpp里报:error: conversion from '<unnamed>::ufixedpoint32' to 'unsigned char' is ambiguous

发现arm-linux编译3.4.1这么费劲啊,网上都是编译的2.4.1这么低的版本。难怪没人搞高版本的!

对于这个问题,我看了别人也遇到了:

看网上编译成功的人都是编译很低版本的OpenCV,于是我准备换成OpenCV3.2.0.........

****************************************************************************************************************

*********************************************************************************************************************

去下载了OpenCV3.2.0按照上述步骤,报了一个错:

解决办法:将这个报错文件的语句的abs() 改成 fabs() 即可,继续编译出了第2个错误:

看起来像缺少什么库导致的。然而网上说的 CFLAGS=-march=i686这个解决不了。

最后实在是无奈烦死,改用了OpenCV3.0,然后依旧是报同样的错:perf_compare.cpp.obj:perf_compare.cpp.text._ZN34Size_MatType_CmpType_compareScalar12PerfTestBodyEv+0x3a0): more undefined references to `__sync_fetch_and_add_4' follow  collect2: ld returned 1 exit status  实在解决不了这个问题。

于是换成OpenCV 2.4.13:编译通过!!!!!终于通过了!!!!!!

然后准备跑一个例子:

https://blog.csdn.net/luotuo44/article/details/8958990  但这个例子没跑起来,修改后也跑不起来:

醉了。。。。最后试了很多次,终于搞定了。

原来是要将编译好的arm-opencv下的lib的所有文件拷贝到arm/4.3.2/lib下面就可以了。我的测试文件是test_wd.cpp。现在已经不报错了,也生成了可执行文件。其中` 符号不是逗号,而是1 左边的那个符号。

这样应该就是表示 https://blog.csdn.net/humanplus/article/details/76417677  第7步完成了。然而我最后用Sdsoc创建xfOpenCV的膨胀的例子 dilation时 依旧编译出错:

没有生成sd_card,所以也无法去验证在开发板上是否可以跑起来xfOpenCV!!!????哎资料太少的东西果然累!!!!

终于知道原因了,OpenCV交叉编译时cmake第一项不应该填“arm-linux”而应该填写“linux”!!!

另外我换了2018.2版本的终于可以了:

这个下载按钮可以使用!!!!!

 

我换了2018.2版本后,可以跑HLS的例子:

但创建新工程时总是不行啊:

点击Next后,Finish按钮始终是灰色啊?!!!这是什么奇葩问题都被我遇上了,最近不顺啊!!!

我将xilinx的所有软件全部卸载了,全部重新装,现在终于正常了!!!!!!!没有什么奇葩事情是卸载解决不了的!但是新建HLS工程仿真时报了一个错:libOpenCL.so.1: cannot open shared object file: No such file or directory  解决办法:

apt-get install ocl-icd-opencl-dev


即可,再无问题。

我在米联客7035的板子上跑了一下Sdx的一个例子:(7035平台文件是我们老大搭建好的)

这是不是因为我没有格式化这个SD卡,另外我发现这个板子在ubuntu下也可以跑:

太好了,这样以后就不会2个系统过来过去了。

我待会儿格式化再试一次

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

元气少女缘结神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值