到此处假设你前面的arm交叉编译环境和QT已经配置完成,如果没有配置完毕,请参考链接
下载openCV2.4.9的源码:Download opencv-2.4.9.zip (OpenCV) (sourceforge.net)
也有其它相关资源,可以在我接下来的文章中挨个提到,
但是如果不想一个一个找的,可以见我提供的资源包链接:
资源包:链接:https://pan.baidu.com/s/1A6sYe6anGRvDXfwHfF-f1Q?pwd=9ki1
提取码:9ki1
1.基本环境确认:
首先确保你本地的编译环境是配置ok的,查看.bashrc文件如下图所示含有arm-linux-4.4.1的编译环境
搭建opencv-2.4.9_arm.tar.gz移动到/opt/目录下
2.opencv的搭建
apt-get install libavcodec-dev libavformat-dev libswscale-dev
这几项与视频解码相关,需要安装,否则编译opencv会报错。
将我们下载下来的opencv-2.4.9.zip在windows下解压之后移动到Ubuntu的/home/Baidu/opencv目录下,如果没有该目录,创建就可以了,(也可以在ubuntu下解压,都是一样的,如果在Ubuntu下解压,输入指令:unzip opencv-2.4.9.zip)
安装cmake工具:
apt-get update & apt-get install cmake & apt-get install cmake-qt-gui
注意一定是无报错结尾,确保确实安装上了,
安装val/v412等必要的依赖库:
使用命令“cmake-gui”打开 cmake 的 gui 界面,开始进行配置,如下图所示:
(其中“where to build the binaries”所指的路径是自己创建的路径,建议放置到统一位置)
运行完之后,下面会出现红色区域,将其中WITH_TIFF,WITH_CUDA 及 WITH_GTK的对勾去掉,然后点击下面Configure和Generate,如下图所示:
查看前面自己创建的输出编译文件,可见生成了Makefile,我的是/opt/opencv-arm,如下图所示:
然后编辑文本文件:gedit CMakeCache.txt,跳转至194行,将
将“CMAKE_EXE_LINKER_FLAGS:STRING=' '”改为
“CMAKE_EXE_LINKER_FLAGS:STRING=-lpthread -lrt -ldl”如下图所示:
编译libv4l库:去网站下载https://src.fedoraproject.org/repo/pkgs/libv4l/libv4l-0.6.4.tar.gz/7ef58595dc36252be7f83f69b379a715/
或者输入指令:
wget https://src.fedoraproject.org/repo/pkgs/libv4l/libv4l-0.6.4.tar.gz/7ef58595dc36252be7f83f69b379a715/libv4l-0.6.4.tar.gz获取libv4l-0.6.4.tar.gz
之后将库文件videodev.h拷贝到/usr/include/linux/
解压文件之后进入libv4l库生成的目录下:打开Makedile文件:
在第一行添加内容如下图所示:CC=arm-none-linux-gnueabi-gcc
然后进入libv4l1和libv4l2以及libv4lconvert目录下,在每个文件的Makefile下添加相同的内容:CC=arm-none-linux-gnueabi-gcc(添加的位置都是第一行)
之后回到libv4l-0.6.4下,输入命令:
mkdir tmp & make & make install PREFIX=$PWD/tmp
编译之后,进入刚刚创建的tmp目录下的bin目录下,输入file *.*,查看编译后的库是否为ARM的,如下图所示:
编译成功以后,回到tmp目录下,输入以下命令把库和头文件复制到交叉编译链里相应的路径中:
cp -r include/* /usr/local/arm/4.4.1/arm-none-linux-gnueabi/include/ & cp -r lib/* /usr/local/arm/4.4.1/arm-none-linux-gnueabi/lib
之后将编译生成的lib库拷贝到opencv的安装路径下:cp -r lib/ /opt/opencv-arm/lib/
之后回到opencv的编译目录:cd /opt/opencv-arm/,开始make编译,输入make,如下图所示,正在编译中:
然后输入make install,运行结束无报错结果如下图所示:
之后进入到/usr/local/opencv-2..4.9目录下,生成我们的库文件,如下图所示:
3.UVC程序编译
将提供的源码进行解压,进入解压目录。然后使用命令“/opt/qt-4.7.1/bin/qmake & make”编译程序,编译完成即可看到程序,如下图所示:(但我发现官方给我们的camera包已经编译好了,这边我就没有再次编译了)
4.编译openssl
将openssl-1.0.2s.tar.gz移动到/home/baidu/目录下,进行解压
setarch i386 ./config no-asm shared --prefix=/usr/local/openssl/
其中各个参数的意思如下:
setarch i386:声明生成的是32位CPU,如果是64位CPU则去除该部分
--prefix :指定make install后生成目录的路径,不修改此项则默认为OPENSSLDIR目录(/usr/local/ssl)。
shared :生成动态连接库。
no-asm: 是在交叉编译过程中不使用汇编代码代码加速编译过程,原因是它的汇编代码是对arm格式不支持的
修改Makefile里面的编译器参数:打开Makefile配置文件,修改其中的62行如下图所示:
CC= arm-none-linux-gnueabi-gcc
AR= arm-none-linux-gnueabi-ar $(ARFLAGS) r
RANLIB= arm-none-linux-gnueabi-ranlib
NM= arm-none-linux-gnueabi-nm
之后进行编译,输入:make & make install,无报错结束查看/usr/local/openssl目录,可以看到生成的库文件,如下图所示:
5.编译curl
在这里需要用到的交叉编译器是:arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2,该编译包可见我提供的资源包
具体的该资源包配置和之前配置其它是一样的步骤,大致就是解压:tar -xvf arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2,然后修改全局配置环境:nano .bashrc输入:export PATH=$PATH:/usr/local/arm/arm-2014.05/bin,进行环境重新有效:source .bashrc
下载curl-7.65.0.tar.gz:curl downloads在网页下载,或者输入:wget https://curl.se/download/curl-7.65.1.tar.gz,如下图所示:
解压之后进入解压目录,进行设置编译参数:./configure --prefix=/usr/local/openssl --host=arm-none-linux-gnueabi CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gunbabi-g++--with-ssl=/usr/local/openssl
无报错结束,如下图所示:
然后输入:make & make install无报错结束,如下图所示:
然后进入/usr/local/openssl/lib就可以看到编译之后的库文件
6.编译jsoncpp
在这里需要用到的交叉编译器是:arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2,该编译包可见我提供的资源包
具体的该资源包配置和之前配置其它是一样的步骤,大致就是解压:tar -xvf arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2,然后修改全局配置环境:nano .bashrc输入:export PATH=$PATH:/usr/local/arm/arm-2014.05/bin,进行环境重新有效:source .bashrc
下载curl-7.65.0.tar.gz:curl downloads在网页下载,或者输入:wget https://curl.se/download/curl-7.65.1.tar.gz,如下图所示:
解压之后进入解压目录,进行设置编译参数:./configure --prefix=/usr/local/openssl --host=arm-none-linux-gnueabi CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gunbabi-g++--with-ssl=/usr/local/openssl
无报错结束,如下图所示:
然后输入:make & make install无报错结束,如下图所示:
然后进入/usr/local/openssl/lib就可以看到编译之后的库文件
7.制作文件系统
将资源包里的iTOP-4412-QtE5.7_4412_elite.tgz拷贝到目录/home/baidu/root下,并对其进行解压:tar -xvf iTOP-4412-QtE5.7_4412_elite.tgz,解压之后的目录如下图所示:
进入解压完的目录root下,将编译好的openssl拷贝到根目录文件系统的/usr/local/路径下:cp -r /usr/local/openssl/ ./usr/local/
修改当前根目录下的环境变量,添加openssl的系统变量,输入:gedit ./etc/init.d/rcS,修改环境变量如下图所示:
将lib文件拷贝到根目录lib下:cp -r /usr/local/openssl/lib/* ./lib/
因为我的编译好的curl在目录/usr/local/openssl下,所以不需要单独编译。
将编译好的jsoncpp拷贝到根目录的/usr/local下,步骤如上:
最后将opencv编译好之后的文件移动到文件系统下
自带的libstdc++.so.6.0.10不支持GLIBCXX_3.4.11,在之后运行程序会报错。
cd ./lib
移除原本的头文件:rm -rf libstdc++.so.6
将arm4.4.1的文件拷贝进去:cp -r /usr/local/arm/4.4.1/arm-none-linux-gnueabi/libc/usr/lib/libstdc++.so.6.0.12 ./
重新创建链接:ln -s libstdc++.so.6.0.12 libstdc++.so.6
8.打包根文件系统
选择工具linux_tools.tgz将其拷贝到任意目录下并解压
进入到/home/baidu/root输入:make_ext4fs -s -l 2092957696 -a root -L linux system.img root
将这个system.img拷贝到开发板:fastboot.exe flash system system.img
9.重新分区烧写
- 因为我们原本的分区时1G的需要重新分区,分为2G的,进入开发板,重新分区:
fdisk -c 0 2048 300 300
fatformat mmc 0:1
ext3format mmc 0:2
ext3format mmc 0:3
ext3format mmc 0:4
fastboot
fastboot.exe flash bootloader u-boot-iTOP-4412.bin
fastboot.exe flash kernel zImage
fastboot.exe flash ramdisk ramdisk-uboot.img
fastboot.exe flash system system.img
fastboot -w
fastboot reboot