【jetson交叉编译(1)】nvidia jetson 系列开发板交叉编译方法,CUDA依赖程序

news2024/9/30 10:53:23

资源

Toolchain Information
jetson-linux
jetpack

文章目录

  • 资源
  • 1 方案1 qemu-aarch64-static和docker 容器编译jetson
  • 2 方案2 模拟器+交叉编译器
    • 2.1 应对库缺失的情况,进行环境准备
      • 2.1.1 模拟器(方案1)
      • 2.1.2 在jetson上面进行安装(方案2)
    • 2.2 获得根文件系统,解决CUDA依赖程序
      • 2.2.1 打包根文件系统(方案1)
      • 2.2.2 利用SDK Manager安装cuda(方案2)
    • 2.3 交叉编译
      • 2.3.1 下载交叉编译器
      • Bootlin的GCC
      • Linaro的GCC
      • 区别总结
      • 2.3.2 配置交叉编译 toolchain.cmake
      • 2.3.3 执行编译

1 方案1 qemu-aarch64-static和docker 容器编译jetson

打包已经正常运行的xavier系统的根文件系统,制作docker镜像,可以免去一些软件的安装,直接就可以进行应用程序的编译。

sudo apt install qemu-user-static

已经正常运行的jetson 系统上打包根文件系统

sudo su
cd /
tar -cvpzf backup.tgz --exclude=/proc --exclude=/lost+found --exclude=/backup.tgz --exclude=/mnt --exclude=/sys /

将打包好的文件系统拷贝到host系统上

sudo scp backup.tgz host_user@host_ip_address:~ 

导入docker镜像

docker import backup.tgz nvidia/xavier:r32.7.1
#查看已经导入的镜像
sudo docker images

运行docker镜像

sudo docker run -it -v /usr/bin/qemu-aarch64-static:/usr/bin/qemu-aarch64-static -v /源码存储路径:/挂载容器内目录 nvidia/xavier:r32.7.1 /bin/bash   

在容器内对源码进行交叉编译,生成二进制文件通过scp方式拷贝到xavier上

sudo scp backup.tgz xavier_user@xavier_ip_address:~ 

nvidia jetson 系列开发板系统烧录方法

1.固件下载地址

https://developer.nvidia.com/embedded/jetson-linux-archive

2.寻找对应版本JETSON LINUX VERSION

# 点击 See the online Jetson Linux Developer Guide for detailed documentation.
# 找到Quick Start 按照教程使用usb或C口线进行连接并进行烧录

2 方案2 模拟器+交叉编译器

2.1 应对库缺失的情况,进行环境准备

2.1.1 模拟器(方案1)

此处配置aarch64 ubuntu运行环境,并不是直接在该环境下进行编译工作,因为该环境下的编译太慢了;配置该环境,主要是为了能够更快速,更加便捷的获取交叉编译依赖的动态库,和静态库,头文件信息等。

参考:https://blog.csdn.net/leacock1991/article/details/113744066
参考:https://www.cnblogs.com/grass-and-moon/p/16173739.html

在编译过程中会出现很多链接库缺失的问题。这个时候就需要进入aarch64 ubuntu环境安装对应的库,并将安装后的头文件,库文件拷贝到/usr/aarch64-linux-gnu/lib目录下(或/usr/aarch64-linux-gnu/usr/lib,用于将后面拷贝的和原始带的库进行区分),头文件放到/usr/aarch64-linux-gnu/include/中。当然我们的头文件查找方式设置的是set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH),如果在host系统目录下能够找到,那么可以不用进行拷贝。

2.1.2 在jetson上面进行安装(方案2)

在aarch64 ubuntu环境下安装的库存在异常的可能,那么可以在jetson上面进行安装,然后将对应库拷贝出来即可。

2.2 获得根文件系统,解决CUDA依赖程序

2.2.1 打包根文件系统(方案1)

已经正常运行的jetson 系统上打包根文件系统

sudo su
cd /
tar -cvpzf backup.tgz --exclude=/proc --exclude=/lost+found --exclude=/backup.tgz --exclude=/mnt --exclude=/sys /

2.2.2 利用SDK Manager安装cuda(方案2)

利用SDK Manager安装根系统,得到根文件系统,得到cuda

2.3 交叉编译

2.3.1 下载交叉编译器

在这里插入图片描述
在这里插入图片描述Bootlin和Linaro的GCC(GNU Compiler Collection,GNU编译器集合)在本质上都是基于GCC的交叉编译工具链,但它们在提供、维护、优化以及应用场景上存在一些区别。

Bootlin的GCC

  • 提供与维护:Bootlin是一家专注于嵌入式Linux和开源软件的公司,它提供了一系列预编译的交叉编译工具链,包括GCC、GDB、Binutils等,这些工具链针对特定的目标架构进行了优化和测试。Bootlin的工具链通常可以在其官方网站上找到,并提供了多种版本和架构的支持。
  • 应用场景:Bootlin的工具链广泛应用于嵌入式系统、物联网(IoT)设备、汽车电子等领域,帮助开发者在不同的硬件平台上构建和调试软件。
  • 特点:Bootlin的工具链注重稳定性和兼容性,确保开发者能够在不同的开发环境中使用相同的工具链进行开发,减少因工具链差异导致的兼容性问题。

Linaro的GCC

  • 提供与维护:Linaro是一个由多家半导体和硬件公司组成的非盈利性组织,旨在通过开源软件优化ARM架构的处理器性能。Linaro提供了基于GCC的交叉编译工具链,这些工具链针对ARM架构进行了深度优化,以提高编译效率和生成代码的性能。
  • 应用场景:Linaro的工具链特别适用于基于ARM架构的嵌入式系统和移动设备,如智能手机、平板电脑、可穿戴设备等。它帮助开发者在ARM平台上快速构建和部署高性能的应用程序。
  • 特点:Linaro的工具链注重性能优化和社区支持,通过持续的技术更新和社区贡献,确保开发者能够使用到最新的编译技术和最佳实践。

区别总结

Bootlin的GCCLinaro的GCC
提供与维护Bootlin公司提供,注重稳定性和兼容性Linaro组织提供,注重性能优化和社区支持
应用场景广泛应用于嵌入式系统、IoT设备、汽车电子等领域特别适用于基于ARM架构的嵌入式系统和移动设备
特点稳定性和兼容性高,减少因工具链差异导致的兼容性问题性能优化显著,通过持续更新和社区贡献保持技术领先

综上所述,Bootlin和Linaro的GCC在提供、维护、优化以及应用场景上各有侧重,开发者可以根据自己的具体需求和目标架构选择合适的工具链。

2.3.2 配置交叉编译 toolchain.cmake

改文件参考了:https://docs.nvidia.com/vpi/sample_cross_aarch64.html

# ref: https://docs.nvidia.com/vpi/sample_cross_aarch64.html
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)

set(CMAKE_C_COMPILER /usr/bin/aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER /usr/bin/aarch64-linux-gnc-g++)

set(CMAKE_FIND_ROOT_PATH /usr/aarch64-linux-gnu)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH)

set(CMAKE_CUDA_FLAGS "-ccbin ${CMAKE_CXX_COMPILER} -Xcompiler -fPIC" CACHE STRING "" FORCE)

这里有个需要关注的点是配置了,CMAKE_CUDA_FLAGS,其中对ccbin参数设置为${CMAKE_CXX_COMPILER},这个目的是设置nvcc执行过程中回调用的编译器,如果没有这个,那么生成得到.o文件将是host 机器(x86)平台下面的。

参考中的set(CMAKE_TRY_COMPILER_TARGET_TYPE STATIC_LIBRARY)这句话可以不需要,加上的话cmake的时候cuda检测会通不过。

2.3.3 执行编译

cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake ../

(正文完)
今天先写笔记,明天试试方案有没有坑,有坑再填坑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2066008.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

yolov8行人车辆检测与计数系统

yolov8行人车辆检测与计数系统(PythonYOLOv8deepsort车辆追踪深度学习模型清新界面) (1)YOL v8算法实现,模型一键切换更新; (2)检测图片、视频等图像中的各目标数目; &am…

2024数学建模国赛水奖攻略(也可适用其他比赛)

很多同学私信我,问学校要求参加数模比赛,但对建模和编程不太擅长,又不想浪费时间,该怎么办。今天我想和大家分享一些关于数学建模比赛的经验,特别是如何水奖的攻略。 一、选题技巧 有句话说得好,选择比努力…

彻底解决win7系统文件夹选项高级设置是空白

需求背景 win7系统的文件夹选项-高级设置里面是空白的,效果图如下。 解决方法 1、新建txt文本文档 2、文档内容 复制下面的内容到txt文件中,然后保存。 Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Ad…

第七届强网杯-PWN-【WTOA】

文章目录 参考WebAssemblyWasmtime调试逆向源码exp 参考 WebAssembly实践指南——C和Rust通过wasmtime实现相互调用实例 WebAssembly WebAssembly是一种可移植的二进制指令集格式,其本身与平台无关,类似于Java的class文件字节码。 WebAssembly本来的…

Springsecurity中的Eureka报错:Cannot execute request on any known server

完整报错信息: com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server 报错体现: 访问eureka控制面板: 访问测试地址: 控制台报错: 可能的报错原因&#xff…

Python之列表解析和用matplotlib模块绘制图形

列表解析用matplotlib模块绘制成图形导入模块numpy阵列将列表转为阵列arrange函数创建阵列广播 使用matplotilib将阵列绘制成图 列表解析 列表解析式用紧凑的方式来构造列表。 语法: [表达式 for循环 条件] 例如:要得到0-20的偶数列表。需要在0-20中循环…

CyberScraper-2077+simple-one-api:使用大模型爬虫

大模型相关目录 大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步,扬帆起航。 swift与Internvl下的多模态大模型分布式微调指南(附代码和数据&#xff…

IT6113: 高速MIPI DSI 4通道转8通道转接芯片资料

1、产品概述: 芯片将 SOC输出的4通道高速 Mipi DSI 视频转换为8通道半速 DSI 显示器,用于平板电脑、智能手机、笔记本电脑、 VR、智能手表等应用,分割器模式也可用。 2、产品说明 : IT6113 MIPI DSI 视频桥是一个4通道进、8通道出…

2024安卓iOS免签封装源码/解决APP误报毒/可打包和上传APP/自动实现5分钟随机更换签名

源码简介: 2024全新安卓iOS免签封装源码,它可处理apk报毒,解决APP误报毒。不仅可打包APP,也可上传APK。自动实现5分钟随机更换包名和签名系统源码。 解决app误报毒,可打包APP可上传APK,并且自动实现5分钟…

ShardingSphere导致的NPE

1. 项目背景 工程内使用shardingsphere支持分库分表,上层使用的MybatisPlus,有一张表的操作总是报NullPointException。 2. 异常堆栈 ### SQL: INSERT INTO t_tg_message ( update_id, from_id, from_user_name, chat_id, type, data, text, create_…

领夹麦克风哪个品牌音质最好?一文揭秘国内最好的麦克风品牌

在数字化直播与Vlog盛行的今天,无线领夹麦克风凭借其便捷性与高音质,成为了内容创作者们的必备好物。但随着市场的迅速扩张,无线领夹麦克风领域也悄然滋生了一系列乱象。品牌众多,质量却良莠不齐,消费者稍有不慎便可能…

Ollama是什么?安装部署指南

Ollama是什么? 一个本地部署运行大模型的工具,一行命令一键启动,支持linux、windows和mac操作系统的安装。 Ollama支撑哪些大模型? 访问:https://ollama.com/library,列表下的大模型,它都支持…

centos7 redis安装+开机启动(6379+6380)

redis安装 步骤1-下载 下载地址:Index of /releases/ 步骤2-安装 Centos安装Redis-CSDN博客 下载包到 /usr/local/redis解压 tar -zxvf redis-7.0.0.tar.gz切路径 /usr/local/redis/redis-7.0.0编译 make切路径 /usr/local/redis/redis-7.0.0/src安装make instal…

Transformer动画讲解 - Softmax函数

Transformer的Softmax函数 Transformer的Softmax函数: 用于将原始注意力分数转换为输入标记的概率分布。这种分布将较高的注意力权重分配给更相关的标记,并将较低的权重分配给不太相关的标记。Transformers通过Softmax在生成输出时,使用注意…

Find My激光笔|苹果Find My技术与激光笔结合,智能防丢,全球定位

激光笔通常用于指示特定的方向或位置。激光笔在教学领域应用广泛。老师可以利用激光笔在教室中远距离展示教学材料上的内容,。在户外活动中,激光笔也发挥着重要作用,发出求救信号或与其他营地建立联系。激光笔还可以用于娱乐和创意表达。 在…

认知杂谈21

今天分享 有人说的一段争议性的话 I I 自在之“坏”:真实自我的绽放 在社交场合中,听到“他不是个好人”这句话可能会让人惊讶,但其实被贴上“坏人”标签的人往往敢于跳出规则框架,展现真实自我。他们不做表面和谐的牺牲品&am…

前程无忧搜索接口 JS 逆向:阿里系acw_sc__v2和Sign加密

📊 前程无忧搜索接口 JS 逆向:阿里系acw_sc__v2和Sign加密 🔍 观察网页加密规律:阿里系acw_sc__v2 在分析前程无忧的搜索接口时,我们首先需要关注网页的加密规律。特别是阿里系的 acw_sc__v2 加密机制。这个加密机制通…

2024世界机器人大会盛大开幕,卓翼飞思携无人智能领域产品集中亮相 !

开放创新 聚享未来!万众瞩目的2024世界机器人大会暨博览会于8月21日在北京亦创国际会展中心盛大开幕。大会聚焦机器人技术与产业前沿趋势,展示机器人创新应用赋能千行百业的多元场景,全球顶尖的机器人科学家、行业领袖、创新精英汇聚一堂&…

干货-并发编程提高——线程池-Executor (十三)

Executor 框架(java线程基础)不仅包括了线程池的管理,还提供了线程工厂、队列以及拒绝策略等,Executor 框架让并发编程变得更加简单。 /** * 用给定的初始参数创建一个新的ThreadPoolExecutor。 */ public ThreadPoolExecutor(in…

[创业之路-141] :产品经理 - NPDP概述

目录 一、产品经理以及主要职责 1.1 概述 1、市场调研与需求分析 2、产品规划与设计 3、项目管理与协调 4、产品推广与销售支持 5、产品运营与维护 6、其他职责 1.2 产品经理与项目经理的职责分工 1.2.1 职责区别 产品经理 项目经理 1.2.2 合作方式 二、什么是NP…