由于项目的需要,这两天花了点时间在Xilinx的ZedBoard板上移植了opencv3.4.4,中间遇到了一些问题和困难,好在最后成功的把该版本的opencv3.4.4移植到Zedboard板子上了。过程中参考了好多网友的写的博客,刚开始按照大多数人的方法把opencv2.4.13很顺利的移植到了ZedBoard上,基本上没遇到啥问题。但是当要把3.4.4版本的opencv移植的时候却遇到了各种问题,最后发现最大的问题是由于xilinx的交叉编译器版本太落后引起的,后来尝试用通用版本的交叉编译器移植了一遍,然后就成功的移植上了。下面就将opencv3.4.4版本移植到ZedBoard上的过程给记录一下。
软件平台:Ubuntu 16.04 ,VMware 10.0.7
交叉编译器:arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
(下载l链接:https://pan.baidu.com/s/12jN7wZmgti45HQIqpgqFIw 提取码:j4kl )
硬件平台:ZedBoard Rev.D
一、在Ubuntu上安装交叉编译器
交叉编译器是解压安装,基本思路是将下载的交叉编译器文件解压的系统的某个目录下,然后配置一下环境变量即可使用。
1、下载交叉编译器安装文件到家目录;
2、解压安装文件到/opt目录下(根据需要可以选择不同的安装目录);
3、进入到/opt/arm-2014.05/bin目录,查看解压出来的交叉编译器可执行文件;
4、执行sudo vi /etc/enviroment命令打开环境变量配置文件,在文件后面添加/opt/arm-2014.5/bin路径,如下图所示
然后保存退出。
5、执行source /etc/enviroment命令,使环境变量配置生效。
6、执行arm-none-linux-gnueabi-gcc -v指令,可以看到如下信息,表示交叉编译器安装成功。
二、在Ubuntu上安装cmake,执行:sudo apt-get install cmake cmake-curses-gui命令即可自动安装(确保虚拟机中的Ubuntu可联网)。
三、移植Opencv 3.4.4
1、在/home目录新建一个opencv344的目录,然后将Opencv 3.4.4 的源代码拷贝到/home/opencv344目录下;
2、进入到/home/opencv344目录中,使用sudo unzip 命令将Opencv 3.4.4.zip文件加压到当前文件夹里,将加压出来的文件夹使用sudo mv命令修改为opencv-3.4.4(这一步不是必须的);
3、进入到/home/opencv344/opencv-3.4.4目录里,新建两个文件夹build和install;
4、进入到build目录,执行sudo cmake-gui命令,打开cmake窗口
在source code里点击Browse Source选择opencv源代码根目录,即/home/opencv344/opencv-3.4.4;
在binaries里点击Browse Build选择在上一步新建的build文件夹,即/home/opencv344/opencv-3.4.4/build;
然后点击窗口左下角“Configure”按钮,然后弹出如下界面。
在上图中选择第四个选项“Specify options for cross-compiling”,然后点击“Next”按钮,然后弹出如下界面
在“Operating System”中填入linux,在"Version"中填入4.8.3(可不填),在“Processor”里填入arm;
在Compilers里选择交叉编译器所在的目录,C对应的是/opt/arm-2014.05/bin/arm-none-linux-gnueabi-gcc,C++对应的是/opt/arm-2014.05/bin/arm-none-linux-gnueabi-g++;
在"Target Root"中选择/opt/arm-2014.05/arm-none-linux-gnueabi,然后点击“Finish”按钮,cmake开始执行配置操作。
以下图片显示的是我配置时的编译选项,可以参考一下:
注意:在上图中CMAKE_INSTALL_PREFIX要选择之前我们在opencv-3.4.4目录下新建的install目录(如果不选的话默认安装目录是/usr/local,这一步根据自己的实际需要可有所变动)
配置选项修改完毕后,先点击“Configure”按钮进行配置修改,然后点击“Generate”按钮生存makefile文件。然后退出cmkae-gui界面,执行ls命令可以看到在当前的build目录里生成了一堆相关的文件。
5、分别执行make命令和make install指令,其中make指令会执行较长时间的代码编译工作,请耐心等待!下图是make执行完毕成功的界面:
make执行成功后,可以执行make install指令,将编译好的文件安装到我们前面指定的目录里,即/home/opencv344/opencv-3.4.4/install,然后可以进入该目录查看安装好的文件目录:bin、include、lib、python、share,其中lib目录存放的是交叉编译好的opencv3.4.4的库文件,也即是我们要下载移植到ZedBoard板子上的东西。
四、Opencv镜像库的制作及移植
1、使用dd命令创建一个80M的img镜像文件;
2、使用mkfs.ext2命令对刚才创建的img镜像文件进行格式化;
3、使用chmod命令修改img镜像文件的写入权限;
4、将该img镜像文件挂载在/mnt目录下;
5、进入/mnt目录,将在/home/opencv344/opencv-3.4.4/install/lib编译好的库文件复制到本目录里。
6、将交叉编译器里需要用到的libstdc++.so库文件复制到opencv镜像库中;
7、使用chmod命令去掉opencv_lib344.img的写入权限;
8、将/mnt目录卸载掉,完成opencv_lib344.img镜像库的制作。
五、对测试文件进行交叉编译
我的测试文件是一个检测车号的文件,使用交叉编译器进行编译,如下图所示:
六、在ZedBoard上移植测试
1、将opencv_lib344.img镜像库和test344.o文件及待检测的图片拷贝到U盘根目录里,把ZedBoard设置为从SD卡中启动,然后将U盘挂载到ZedBoard上。
2、在ZedBoard上使用fdisk -l命令查看U盘挂载后的盘符是/dev/sda1,使用mount命令挂载到/mnt目录下,进入/mnt目录。
3、然后使用mkdir命令在/usr目录下新建lib目录,接着将opencv_lib344.img镜像挂载到/usr/lib目录。
4、执行test344.o测试程序,观察测试结果。
至此,表明OpenCV3.4.4在ZedBoard上移植成功。