在NVIDIA Tegra K1 ARM平台进行本地应用编译

2024-04-19 11:18

本文主要是介绍在NVIDIA Tegra K1 ARM平台进行本地应用编译,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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 应用程序。

这篇关于在NVIDIA Tegra K1 ARM平台进行本地应用编译的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/917391

相关文章

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

使用Python进行文件读写操作的基本方法

《使用Python进行文件读写操作的基本方法》今天的内容来介绍Python中进行文件读写操作的方法,这在学习Python时是必不可少的技术点,希望可以帮助到正在学习python的小伙伴,以下是Pyth... 目录一、文件读取:二、文件写入:三、文件追加:四、文件读写的二进制模式:五、使用 json 模块读写

使用zabbix进行监控网络设备流量

《使用zabbix进行监控网络设备流量》这篇文章主要为大家详细介绍了如何使用zabbix进行监控网络设备流量,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装zabbix配置ENSP环境配置zabbix实行监控交换机测试一台liunx服务器,这里使用的为Ubuntu22.04(

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

在Pandas中进行数据重命名的方法示例

《在Pandas中进行数据重命名的方法示例》Pandas作为Python中最流行的数据处理库,提供了强大的数据操作功能,其中数据重命名是常见且基础的操作之一,本文将通过简洁明了的讲解和丰富的代码示例,... 目录一、引言二、Pandas rename方法简介三、列名重命名3.1 使用字典进行列名重命名3.编

python安装完成后可以进行的后续步骤和注意事项小结

《python安装完成后可以进行的后续步骤和注意事项小结》本文详细介绍了安装Python3后的后续步骤,包括验证安装、配置环境、安装包、创建和运行脚本,以及使用虚拟环境,还强调了注意事项,如系统更新、... 目录验证安装配置环境(可选)安装python包创建和运行Python脚本虚拟环境(可选)注意事项安装

springboot 加载本地jar到maven的实现方法

《springboot加载本地jar到maven的实现方法》如何在SpringBoot项目中加载本地jar到Maven本地仓库,使用Maven的install-file目标来实现,本文结合实例代码给... 在Spring Boothttp://www.chinasem.cn项目中,如果你想要加载一个本地的ja

Linux中Curl参数详解实践应用

《Linux中Curl参数详解实践应用》在现代网络开发和运维工作中,curl命令是一个不可或缺的工具,它是一个利用URL语法在命令行下工作的文件传输工具,支持多种协议,如HTTP、HTTPS、FTP等... 目录引言一、基础请求参数1. -X 或 --request2. -d 或 --data3. -H 或