当前位置: 首页 > news >正文

nvidia jetson 系列开发板交叉编译方法,CUDA依赖程序

资源

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.3 交叉编译
      • 2.3.1 下载交叉编译器
      • 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.3 交叉编译

2.3.1 下载交叉编译器

在这里插入图片描述
在这里插入图片描述

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 ../

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 免费分享:1900-2023中国大都市群自然灾害数据(附下载方式)
  • C语言:链表插入
  • qiankun微前端
  • 【MySQL进阶之路】表结构的操作
  • live2d + edge-tts 优雅的实现数字人讲话 ~
  • 【在线+sdwebui】在线免费运行stable-diffusion-webui (无需配置环境)
  • 组件间通信高级
  • Windows平台RTSP|RTMP播放器如何实时调节音量
  • 使用 Fyne 构建 GUI 应用:设置标签文本和自增计数器
  • LLMs之Framework:Hugging Face Accelerate后端框架之FSDP和DeepSpeed的对比与分析
  • 【C++第十三章】Stack、Queue和Priority_Queue
  • Scikit-learn:用于数据挖掘和数据分析的简单而有效的工具,建立在 NumPy, SciPy 和 Matplotlib 上。
  • 【数学分析笔记】第2章第2节数列极限(2)
  • 《深入浅出算法竞赛》-递推与递归(笔记版)
  • Python之函数的使用
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • [译]CSS 居中(Center)方法大合集
  • 07.Android之多媒体问题
  • chrome扩展demo1-小时钟
  • ES6系统学习----从Apollo Client看解构赋值
  • interface和setter,getter
  • iOS | NSProxy
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • java8 Stream Pipelines 浅析
  • Java反射-动态类加载和重新加载
  • jdbc就是这么简单
  • node学习系列之简单文件上传
  • React16时代,该用什么姿势写 React ?
  • Redis字符串类型内部编码剖析
  • SwizzleMethod 黑魔法
  • 从PHP迁移至Golang - 基础篇
  • 关于List、List?、ListObject的区别
  • 利用jquery编写加法运算验证码
  • 学习ES6 变量的解构赋值
  • 移动端解决方案学习记录
  • Android开发者必备:推荐一款助力开发的开源APP
  • ionic入门之数据绑定显示-1
  • Java性能优化之JVM GC(垃圾回收机制)
  • kubernetes资源对象--ingress
  • (16)Reactor的测试——响应式Spring的道法术器
  • (STM32笔记)九、RCC时钟树与时钟 第二部分
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (四十一)大数据实战——spark的yarn模式生产环境部署
  • (一) springboot详细介绍
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)重识new
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .NET 依赖注入和配置系统
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • @property python知乎_Python3基础之:property
  • @Transactional 竟也能解决分布式事务?