在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

相关文章

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

Java进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

SpringBoot配置Ollama实现本地部署DeepSeek

《SpringBoot配置Ollama实现本地部署DeepSeek》本文主要介绍了在本地环境中使用Ollama配置DeepSeek模型,并在IntelliJIDEA中创建一个Sprin... 目录前言详细步骤一、本地配置DeepSeek二、SpringBoot项目调用本地DeepSeek前言随着人工智能技