"); //-->
By Toradex 胡珊逢
1). 简介
传统的ARM 处理器由于其性能或者存储空间的缘故,源码代码都是在 PC 机上用相应的编译器交叉编译为二进制可执行文件。最后再将其部署目标板进行远程调试。因此,用户必须在 PC 上配置 ARM 开发环境,这一般包括交叉编译工具、头文件、交叉编译所得的库文件以及其他配置文件等。
Nvidia Tegra K1 处理器,具有 4 核 Cortex-A15,最高主频为 2.2 GHz。本文将使用Toradex公司基于此处理器的Apalis TK1 ARM计算机模块进行测试,在这个模块上,除了可以使用 Toradex 提供的基于 Angstrom 的 Linux BSP 外,用户还可以在 上面使用由Nvidia 提供的 JetPack BSP。该 BSP 是基于 Ubuntu 的针对 Tegra K1 处理器的发行版本,包含基本的 Linux 工具和 Nvidia 专属的 CUDA 支持库文件,方便用户开发 K1 上的 Kepler GPU,发挥其强大的并行计算能力。
由于 JetPack BSP 采用了 Ubuntu,Apalis TK1 的软件系统能够延续 PC 上的用户使用习惯,包括支持使用 apt-get 在线安装软件,软件名字与基于 x86 的 Ubuntu 系统并无二致。加之 Apalis TK1 处理器本身强大的性能,以及 16 GB 的片上存储,用户能够直接在 Apalis TK1 编译应用源代码。下面将以 OpenCV 2.4.13 在 Apalis TK1 本地编译为例进行说明。
2). 具体操作步骤
a). 安装 Linux 开发的基本软件
---------------------------
sudo add-apt-repository universe
sudo apt-get update
sudo apt-get install build-essential
---------------------------
b). 安装 OpenCV 依赖软件
---------------------------
sudo apt-get -y install make cmake cmake-curses-gui g++
sudo apt-get -y install libavformat-dev libavutil-dev libswscale-dev
sudo apt-get -y install libv4l-dev
sudo apt-get -y install libeigen3-dev
sudo apt-get -y install libglew1.6-dev
sudo apt-get -y install libgtk2.0-dev
---------------------------
c). GCC 编译器
---------------------------
ubuntu@tegra-ubuntu:~$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-linux-gnueabihf/4.8/lto-wrapper
Target: arm-linux-gnueabihf
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.8.4-2ubuntu1~14.04.3' --with-bugurl=file:///usr/share/dof
Thread model: posix
gcc version 4.8.4 (Ubuntu/Linaro 4.8.4-2ubuntu1~14.04.3)
---------------------------
d). 下载 OpenCV
---------------------------
wget https://github.com/Itseez/opencv/archive/2.4.13.zip
---------------------------
解压下载的软件包。
e). 本地编译 OpenCV
---------------------------
cd opencv-2.4.13
mkdir build
cd build
cmake -DWITH_CUDA=ON -DCUDA_ARCH_BIN="3.2" -DCUDA_ARCH_PTX="" -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF ..
make -j4
---------------------------
充分利用 TK1 所具有的 4 个处理器,缩短编译时间。由于启用 4 线程编译应用,这在缩短编译时间的同时会给 CPU 带来满负荷的处理任务,导致 CPU 发热增加。因此,在启动多线程编译应用的时候,需要为 Apalis TK1 提供良好的散热措施,包括使用带风扇的散热器等。整个编译过程将会持续 数十分钟。
f). 安装 OpenCV
---------------------------
sudo make install
---------------------------
对应的文件将会复制到 /usr/local/include 和 /usr/local/lib 目录。
g). 本地编译 OpenCV 例程
---------------------------
cd opencv-2.4.13/samples/gpu
g++ houghlines.cpp -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_calib3d -lopencv_contrib -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_legacy -lopencv_ml -lopencv_objdetect -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_video -lopencv_videostab -o houghlines
---------------------------
执行应用程序
---------------------------
./houghlines ../cpp/logo_in_clutter.png
---------------------------
3). 总结
上面编译 OpenCV 的过程均在 Apalis TK1 计算机模块上完成,所有编译工作不使用在 PC 机上的交叉编译工具。该方法的优点是,用户能够快速地编译源代码,免于在 PC 机上配置开发环境。程序编译过程中所依赖的头文件以及链接的库文件,均在本地目录中寻找。在交叉编译的时候,如果没有配置好目标的 BSP 目录,编译器会使用 PC 机上系统的头文件。如果对应软件在目标板和 PC 机的版本不同,会导致应用在目标板上运行出错。缺点则是在于编译性能。即使具有 4 核 Cortex-A15,但是与 x86 CPU,特别是高端处理器如 i7、i5 相比,K1 仍然存在一定的差距。因此,在编译大型应用的时候,K1 可能需要更多的时间。例如 OpenCV 2.4.13 在 Intel® Core™ i5-3337U CPU @ 1.80GHz × 4 编译耗时约为TK1 的三分之一。如果考虑到源码的管理工具,如 git、svn,PC 机会比 TK1 更具优势。当然对于小型的应用程序,或者一些测试代码,在 TK1 本地编译显然会更具便利。接下来的文章中,我们会介绍在 PC 机使用交叉编译工具开发 Apalis TK1 应用程序。*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。