Jetson AGX Orin从开箱到C++环境配置
2026/7/9 5:19:09 网站建设 项目流程

目录

  • 前言
  • 1. Jetson AGX Orin套件开箱与接口介绍
  • 2. 初次开机与基础设置
  • 3. 远程登陆配置
  • 4. 远程桌面配置
    • 安装xrdp和xorgxrdp
    • 配置xrdp
    • 远程桌面连接
    • 使用xfce(可选)
  • 6. 远程文件传输
  • 7. C++与CUDA混合编程开发环境配置
    • 编译器——GCC,G++
    • 跨平台构建系统生成工具——Cmake
    • 构建自动化工具——make
    • GPU开发套件——CUDA,nvcc
    • Jetson配套的IO控制——JetsonGPIO
    • 远程字典服务——Redis
    • 代码编辑器——VSCode
    • 轻量化的日志库——SpdLog

前言

由于实验室采购了新的Jetson AGX Orin开发套件,需要重新配置一遍环境,故小白向,保姆级的记录过程,以供师弟师妹们参考。

这篇文章面向的对象是几乎没有接触过Linux的同学,因此会尽可能的详细,高手可以参考其他文章 ^ _ ^。
并且本文不涉及嵌入式开发底层(如系统烧录,设备树编写等),仅从开发套件中应用开发方面进行阐述,仅供参考。


1. Jetson AGX Orin套件开箱与接口介绍

开箱后即可看到套件本体,箱子底部有三根电源线、电源适配器和一根USB-typeC线,我们只需要拿出常见的电源线和适配器即可。


套件上所有的接口在说明书中均有详细的说明,这里仅简单介绍一下我们此次需要用到的接口,如图所示。

①电源接口。官方给的电源线使用的type-c是接口,接在上方即可(背面也有一个type-c接口,也可以接电源)
②以太网口。配置完SSH后,可以通过局域网远程登陆套件。
③USB接口。无需多言,本文中用来接鼠标键盘
④DP接口。使用DP连接线连接显示器,在未配置SSH远程登陆之前依赖外部显示与鼠标键盘进行配置。


2. 初次开机与基础设置

初次开机之前,需要准备基本的外设,包括显示器、键盘、DP线,按照一般的PC机的连接方式进行连接即可(键盘鼠标连接USB接口,DP接口连接显示器,电源接口连接适配器,值得注意的是,套件带有外设检测和上电自启,先将所有外设连接好,最后再连接电源即可一次开机。当然无序连接也无妨,重启几次即可
连接完后的系统状态如图所示

Jetson AGX Orin 开发套件自带配套的Ubuntu系统,初次登陆时需要进行一些系统设置,与一般的Linux系统别无二致,跟随向导进行设置即可,详细过程不再赘述。

如果不习惯英文系统,联网更新语言包,然后重启系统即可

3. 远程登陆配置

远程登陆的基于SSH协议(Secure Shell,安全外壳协议),它是一种基于非对称加密技术的网络通信协议,主要用于在不安全的网络环境中实现安全的远程登录、命令执行及数据传输。它通过客户端-服务器架构运行,在连接建立初期利用公钥交换机制协商会话密钥,从而在客户端与远程主机之间构建一条加密的通信隧道,确保后续所有交互内容(包括密码、文件及操作指令)的机密性与完整性。同时,SSH提供多种身份验证方式(如密码验证和更为安全的公钥验证),并衍生出SCP、SFTP等安全文件传输工具,以及端口转发(隧道)功能,是Linux/Unix系统管理员进行远程运维的核心基础工具。

Jetson AGX Orin自带的系统中已经预装了SSH服务,只需要设置设备的局域网IP地址即可,具体操作如图所示。

上位机PC同样需要进行网络IP配置,这里以win10为例,具体步骤如下图所示(win11中大差不差,在高级网络设置中找到对应网卡的更多适配器设置即可进入相同的界面)

值得注意的是,设定的固定IP的前三段需要一致,后一段是不同的,这便引出了局域网的概念。

在使用Orin与网络连接的外设之间进行通信时,局域网是十分基础且重要的概念。

局域网(LAN,Local Area Network)是指在较小地理范围(如家庭、办公室)内,由路由器、交换机等设备连接多台计算机和终端组成的私有网络。在基于IPv4的典型家庭/小型企业局域网中,IP地址的倒数第二位(即子网掩码规定的网络号部分)需要一致才能直接通信(如ping通),是因为子网掩码(通常为255.255.255.0)将IP地址划分为了网络号(前三位)和主机号(最后一位)。只有当两台设备位于同一网络号(即倒数第二位及其之前的位都相同)时,它们才被认为属于同一个广播域,无需经过网关(路由器)转发即可通过ARP协议直接进行二层通信;如果网络号不同,则被视为跨网段通信,必须将数据包发送给默认网关,由路由器进行路由转发才能连通。

因此,当上位机与下位机按照上述设置正确完成后,使用网线将上位机与套件连接,关闭windows防火墙后,即可完成上位机与下位机的网络连接,此时打卡命令提示符窗口,输入

ping xxx.xxx.xxx.xxx #你设定的下位机IP

即可检查是否成功连接下位机,如果成功则为下图所示状态

同样的,在下位机也可以通过ping上位机IP的方式,验证网络是否畅通

确保网络畅通后,即可在上位机中下载ssh连接软件来连接下位机,推荐使用MobaXterm
下载完成解压缩,打开软件后有如下界面。

然后依次点击会话-SSH-输入下位机IP地址与用户名-确定(首次使用MobaXterm时会要求你注册一个主密码,正常注册即可)

确定后,会要求你输入下位机的系统密码,与windows不同,Linux下输入密码时不会显示 * 号正常输入按下回车即可

成功登陆后,左侧会显示文件目录结构,右侧则是Linux终端,到这里就已经通过网线使用SSH成功远程登陆上Jetson AGX Orin套件了,可以在终端中使用Linux命令进行各种各样的操作(比如使用vim手搓代码什么的)

对于精通Linux的大神,到这里几乎可以满足远程运维的全部需求了,然而对于我们这些小白而言,能够像外接显示屏一样的对系统进行可视化的操作是必不可少的,为了达成这一目的我们需要使用xrdp。


4. 远程桌面配置

xrdp 是一个开源的远程桌面协议(RDP)服务器。它的核心作用是在 Linux 系统上“翻译”Windows 的远程桌面协议,让你可以直接使用 Windows 系统自带的“远程桌面连接”(mstsc.exe)工具,像连接另一台 Windows 电脑一样,连接到 Linux 的图形化桌面。

要利用它实现从 Windows 连接到 Linux,核心步骤是在 Linux 端安装和配置 xrdp 服务,然后通过 Windows 的远程桌面客户端进行连接。

具体步骤如下:

安装xrdp和xorgxrdp

联网状态下,在Linux终端中输入:

sudoaptupdatesudoaptinstallxrdp xorgxrdp

来安装xrdp软件

配置xrdp

安装完毕后,需要配置xrdp服务开机自启,并基于xrdp权限,依次终端运行如下代码

sudosystemctlenablexrdpsudoadduser xrdp ssl-cert# 修复证书权限sudosystemctl restart xrdp

远程桌面连接

Linux端配置完成后,先注销本地连接(即直连显示器的Jetson AGX Orin本机不能登陆,否则会占用端口),然后在window中找到“远程桌面连接”

那之后输入下位机IP,用户名和密码,即可使用远程桌面的方式登陆下位机

成功登陆的话会出现以下界面:

这样就算成功了,点击活动即可查看资源管理器,然后就能够像外接显示器一样对套件进行开发了。

==注意:在配置新的GPU的过程中,有可能出现直接连接时发生闪退的现象,==在使用clude+deepseek进行分析后,得到以下解决方案:

问题分析
~/.xsessionrc
第 83 行:remove_apps=(“thunderbird” “rhythmbox” “libreoffice-writer”)
这是bash 数组语法,但/etc/X11/Xsession使用/bin/sh(Ubuntu 上sh指向dash,不是bash)来 source 这个文件。dash不支持( )数组语法,所以报错:
Syntax error: "(" unexpected (expecting "fi")
这导致整个.xsessionrc执行崩溃,任何依赖 Xsession 的会话(包括 xrdp 远程桌面和本机文件管理器)都会异常退出。

将数组写法改为 POSIX 兼容的写法即可。
使用vim编辑xsessionrc文件(如果不会vim则强烈建议先学习vim的操作方式,否则很容易导致无法正确修改文件,vim的使用教程参考vim零基础图文教程):

sudovim~/.xsessionrc

输入密码后,==键入 ”i“==进入编辑模式
将82-92行

if [ -e “/usr/bin/gnome-shell” ]; then
remove_apps=(“thunderbird” “rhythmbox” “libreoffice-writer”)
favorite_apps=“( g s e t t i n g s g e t o r g . g n o m e . s h e l l f a v o r i t e − a p p s ) " f o r a p p i n " (gsettings get org.gnome.shell favorite-apps)" for app in "(gsettingsgetorg.gnome.shellfavoriteapps)"forappin"{remove_apps[@]}”; do
favorite_apps=“( e c h o " (echo "(echo"{favorite_apps}” |
sed -e “s/‘a p p . d e s k t o p ′ , / / g " − e " s / , ′ {app}.desktop', //g" -e "s/, 'app.desktop,//g"e"s/,{app}.desktop’ / /g”)"
done
gsettings set org.gnome.shell favorite-apps “${favorite_apps}”
fi

使用信号使用”#“注释掉,然后在其后面添加如下代码(小贴士:vim中的粘贴键为shift+insert)

if [ -e "/usr/bin/gnome-shell" ]; then favorite_apps="$(gsettings get org.gnome.shell favorite-apps)" for app in thunderbird rhythmbox libreoffice-writer; do favorite_apps="$(echo "${favorite_apps}" | \ sed -e "s/'${app}.desktop', //g" -e "s/, '${app}.desktop' / /g")" done gsettings set org.gnome.shell favorite-apps "${favorite_apps}" fi

确认无误后,按esc退出插入模式,键入“:wq”使文件保存并退出
修改完成后如图所示

使用xfce(可选)

GNOME 对远程桌面的 GPU 加速依赖较强,Jetson 的 GPU 驱动可能不兼容。出现兼容问题时也可以安装 XFCE 作为远程桌面环境

sudoaptupdatesudoaptinstallxfce4 xfce4-goodies

然后修改~/.xsession

echo"startxfce4">~/.xsessionchmod+x ~/.xsession

重启 xrdp和机器:

sudosystemctl restart xrdpsudorebootnow

XFCE 在远程桌面下比 GNOME 稳定得多,并且肉眼可见的流畅。但是肉眼可见的简陋
如果想要改回去,删除~/.xsession 重启即可

rm~/.xsessionsudosystemctl restart xrdpsudorebootnow

6. 远程文件传输

远程连接仅仅解决了远程操作的问题,但没有解决文件传输的问题,主流的文件传输协议有两种FTP与SFTP。
FTP(文件传输协议)是一种诞生于互联网早期的标准网络协议,其核心功能是在客户端与服务器之间进行文件的上传、下载和目录浏览等操作。它最大的特点是采用明文传输,即用户身份凭证和所有数据在网络上均未加密,安全风险极高,并且需要分别建立命令(21端口)和数据(20端口或随机端口)两条独立的连接通道(即“带外”管理),这种模式在防火墙和NAT环境下配置非常复杂。与SFTP相比,它的主要优势在于协议简单、传输效率较高,但若未搭配TLS/SSL(即FTPS),则极不推荐用于传输敏感信息,且与现代网络安全环境兼容性较差。
SFTP(SSH文件传输协议)并非FTP的安全升级版,而是一个基于SSH(安全外壳协议,通常占用22端口)的全新安全协议,其核心功能除文件传输外,还集成了完整的远程文件系统管理能力,如列目录、创建删除文件、修改所有者及权限等。它与FTP的本质区别在于,整个会话只在一条高度加密的单一通道中进行,用户认证和数据全程加密,能够有效抵御窃听和中间人攻击,因此天然具备防火墙友好、配置简单的特性。虽然因为加密计算导致传输速度略慢于纯明文FTP(当CPU性能不佳时,会更慢一些如Jetson AGX Orin),但SFTP凭借其强大的安全性和易用性,已完全取代FTP成为当今远程文件管理的首选标准协议。

值得高兴的是上文中提到的MobaX已经集成了FTP与SFTP功能,能够十分方便的进行文件传输,在这里选择SFTP进行文件传输的演示。
实际上与SSH等于的操作一致,依次点击会话、SFTP、键入IP用户名密码,即可连接成功

连接成功后,左侧为上位机文件目录,右侧为下位机文件目录,使用拖拽的方式就可以十分方便的进行文件的上传与下载


7. C++与CUDA混合编程开发环境配置

在花式连接上Jetson AGX Orin 后,我们可以正式开始开发环境的配置与开发流程的介绍,本文以C++环境配置与开发流程为例子,其他语言环境(python Qt JAVA等)需要的同学们自行探索(大差不差)
为了无缝衔接旧代码的开发,使用查询旧机器中已经安装的环境如下:

软件名版本
gcc、g++9.4.0
cmake3.16.3
makeGNU Make 4.2.1
cudaToolkit、nvcc11.4.19-1
JetsonGPIO(C++版)1.2.5
Redis5.0.4
VSCode1.85.2
SpdLog1.x

下面分别对这些开发环境进行简单介绍、新机器的版本检查及安装

编译器——GCC,G++

gcc 是 GNU 项目发布的编译器套件,是最广泛使用的 C/C++ 编译工具。g++ 是其中的 C++ 编译器前端。
他们可以将 C/C++ 源码编译为可在机器上运行的二进制程序,是C++编程的基础。

使用如下命令进行版本检查

# 查看 gcc 版本gcc--version|head-1# 查看 g++ 版本g++--version|head-1# 查看主版本号gcc-dumpversion

在新Orin上运行后得到如下结果

可以看到,出场自带的套件中没有g++工具,我们可以在联网状态下,使用apt命令安装的gcc和g++(在Ubuntu 20.04中自动安装9.4.0的gcc与g++)。

# Ubuntu/Jetson 上安装GCC G++sudoaptupdatesudoaptinstallgcc g++

安装完成后再查询得到以下结果

即安装成功。

跨平台构建系统生成工具——Cmake

CMake 是一个跨平台的构建系统生成器。它读取CMakeLists.txt文件,自动生成 Makefile 或其他构建系统所需的配置文件。

使用 CMake 管理编译过程 — 查找依赖库(CUDA、OpenCV、JetsonGPIO)、设置编译选项(C++17、CUDA C++11)、组织源文件。CMake 3.16 及以上版本对 CUDA 语言支持更好。
可以使用以下命令进行版本查询

cmake--version|head-1

在新Orin上运行后得到如下结果

可以看到出厂自带套件不含有cmake,我们需要手动安装一下cmake3.16.3

# 系统包管理器安装(Ubuntu 20.04 默认版本为 3.16.3)sudoaptinstallcmake

安装完成后,再次使用查询命令,即可正常返回版本号

构建自动化工具——make

Make 是一个自动化构建工具,根据 Makefile 中定义的规则执行编译。CMake 生成 Makefile 后,由 Make 驱动实际的编译过程。
可以使用以下命令,进行版本检查

make--version|head-1


make作为常用的底层工具,一般Ubuntu系统都自带,如果真的没有,也可以通过apt安装

sudoaptinstallmake

GPU开发套件——CUDA,nvcc

CUDA (Compute Unified Device Architecture) 是 NVIDIA 推出的并行计算平台与编程模型。CUDA Toolkit 包含编译器(nvcc)、运行时库(cudart)、数学库(cuBLAS、cuFFT 等)、调试工具(cuda-gdb)等。

我们可以使用如下命令检查当前cuda的版本

# 自动探测 CUDA 安装路径fordin/usr/local/cuda-* /usr/local/cuda;do[-x"${d}/bin/nvcc"]&&echo"CUDA found:${d}"&&breakdone# 查看 nvcc 版本nvcc--version2>/dev/null||/usr/local/cuda-*/bin/nvcc--version# 查看 CUDA 库文件ls/usr/local/cuda-*/lib64/*.so|wc-l# 通过包管理器查看 CUDA 相关包dpkg-l|grep-E"^ii.*cuda"

查询新Orin的结果如图

可以看到新Orin中并没有找到CUDA相关的套件,这是由于采购的Jetson AGX Orin系统镜像为L4T BSP,它仅含有系统内核和驱动,并不含有JetPack(CUDA + cuDNN + TensorRT + OpenCV),因此我们需要手动安装一下CUDA。

# 手动安装(Jetson 上直接 apt)sudoaptupdatesudoaptinstallcuda-toolkit-11-4

完成CUDA套件安装后,再将nvcc 加入 PATH

# 找到 CUDA 安装路径(通常为 /usr/local/cuda-11.4)CUDA_PATH=$(dirname$(dirname$(which nvcc2>/dev/null||echo/usr/local/cuda-11.4/bin/nvcc)))echo"export PATH=${CUDA_PATH}/bin:\$PATH">>~/.bashrcecho"export LD_LIBRARY_PATH=${CUDA_PATH}/lib64:\$LD_LIBRARY_PATH">>~/.bashrcsource~/.bashrc

当然如果对其他深度学习库和OpenCV图像库有需求的话直接安装JetPack会更好,nvidia-jetpack是一个元包,L4T版本对应的jetpack版本是5.1.2,对应的组件如下

组件对应包
CUDA 11.4cuda-toolkit-11-4
cuDNN 8.xlibcudnn8,libcudnn8-dev
TensorRT 8.5tensorrt,libnvinfer-dev
OpenCV 4.5nvidia-opencv,nvidia-opencv-dev
VPI 5.xnvidia-vpi,nvidia-vpi-dev
多媒体nvidia-l4t-multimedia

因为官方已经配好源了,所以可以用以下命令自动安装,它会自动拉入全部依赖:

sudoaptupdatesudoaptinstallnvidia-jetpack

由于暂时用不到深度学习,这里只安装CUDA套件,安装完后的查询结果如下:

Jetson配套的IO控制——JetsonGPIO

JetsonGPIO 是 NVIDIA 为 Jetson 平台提供的通用 I/O (GPIO) 控制库,允许用户程序通过 40-pin 排针控制外部硬件(如传感器、电机、LED 等)。官方提供有python版本,通常预装在了开发套件中,然而我们想要使用的是第三方的C++版本,通过以下代码可以下载源代码。

# 1. 克隆 C++ 版本cd~gitclone https://github.com/pjueon/JetsonGPIO.git

注意,这种方法需要科学上网,如果没法科学上网可以手动将我已经下载好的压缩包通过SFTP或者U盘传输到home目录下,再通过命令进行解压缩,具体代码与步骤如下

# 1.手动放置 C++ 版本源码cd~tar-xzfJetsonGPIO-1.2.5.tar.gz

下载完毕后进入源码文件夹进行编译构建并执行安装。

# 2. 编译并安装cd~/JetsonGPIOmkdirbuild&&cdbuild cmake..makesudomakeinstall

正确安装完成后,可以通过以下命令验证是否安装成功

# 头文件ls/usr/local/include/JetsonGPIO.h# 库文件ls/usr/local/lib/libJetsonGPIO.*# CMake 能找到(这个库有提供 CMake config)ls/usr/local/lib/cmake/JetsonGPIO/

如果成功将会有以下结果

远程字典服务——Redis

Redis (Remote Dictionary Server) 是一个开源的、基于内存的键值对 (Key-Value) 存储系统。它支持多种数据结构(字符串、哈希、列表、集合、有序集合),所有数据保存在内存中,同时支持异步持久化到磁盘。因其极高的读写性能(10万+ QPS),被广泛用于缓存、消息队列、实时分析、会话管理等场景。

Redis 的核心特性:

  • 内存存储 | 全部数据在 RAM 中,读写延迟亚毫秒级
  • 持久化 | 支持 RDB 快照和 AOF 日志两种方式
  • 发布/订阅 | 内置消息队列机制,支持频道订阅和模式匹配
  • 网络模型 | 单线程事件循环 + I/O 多路复用,无锁竞争
  • 客户端库 | 主流语言均有对应的客户端库(C → hiredis,Python → redis-py,C++ → redis-plus-plus 等)

我们先安装Redis服务

sudoaptupdatesudoaptinstallredis-server
# 验证、应返回 PONGredis-cliping

hiredis 是 Redis 官方开发和维护的 C 语言客户端库。它提供了一套极简、非阻塞的 API,负责处理:

  1. 连接管理— 建立/维持与 Redis Server 的 TCP 连接

  2. 命令发送— 将 Redis 命令序列化为 RESP (REdis Serialization Protocol) 协议格式并发送

  3. 响应解析— 接收并解析 Redis Server 返回的 RESP 协议响应

hiredis 的代码量极小(核心只有 hiredis.c 和 hiredis.h 两个文件),不依赖任何第三方库,编译产物可以是一个极小的静态库libhiredis.a)或动态库(libhiredis.so)。
旧版程序使用的时C接口的redis,因此我们在这里编译安装hiredis 7.2.5

# 1. 下载新版本 Redis 源码wgethttps://download.redis.io/releases/redis-7.2.5.tar.gztar-xzfredis-7.2.5.tar.gz# 2. 编译 hirediscdredis-7.2.5/deps/hiredismake-j$(nproc)# 3. 安装sudomkdir-p/usr/local/include/hiredisforhinhiredis.h read.h sds.h alloc.h sockcompat.h win32.h;do[-f"$h"]&&sudocp"$h"/usr/local/include/hiredis/donesudocplibhiredis.a libhiredis.so /usr/local/lib/sudoldconfig

代码编辑器——VSCode

VS Code 是微软开发的开源代码编辑器,支持语法高亮、智能补全 (IntelliSense)、调试、Git 集成等,并通过扩展系统支持几乎所有编程语言。
在 Jetson 平台上,VS Code 用于浏览和编辑项目的 C++/CUDA 源码,配合扩展实现代码补全、CMake 构建集成和 CUDA-GDB 调试。

检查命令:

# 查看 VS Code 是否安装及版本whichcode&&code--version|head-1# 查看已安装的扩展code --list-extensions

L4T系统下没有预装vscode,咱们手动安装

#手动安装 ARM64 版本vscodecd~wget-Ovscode.deb"https://code.visualstudio.com/sha/download?build=stable&os=linux-deb-arm64"sudodpkg-ivscode.debsudoaptinstall-f

安装完成后,可以在home下新建一个VSCode工作目录~~(养成良好的编程习惯)~~,在远程桌面中打开工作目录终端,输入 code . 即可打开VSCode界面了

VSCode具有海量的扩展插件,可以通过插件市场进行浏览与安装,这里推荐几款插件

轻量化的日志库——SpdLog

spdlog 是一个超高速、纯头文件的 C++ 日志库,支持异步/同步输出、多 sink(控制台、文件、syslog)、自定义格式、日志分级(trace/debug/info/warn/error/critical),性能比传统的 glog/log4cplus 快数倍,是现代 C++ 项目中最广泛使用的日志方案。
本人之前写过一个博客介绍Linux安装Spdlog
现在来看略微冗余,现在精简一下:

cd~#不用魔法更方便gitclone https://gitcode.com/GitHub_Trending/sp/spdlog.gitcdspdlogmkdirbuildcdbuild cmake..make-j8sudomakeinstall

最后,我让AI写了个环境检查脚本输出结果如下

至此,一台新的Jetson AGX Orin 从开箱到环境部署就都完成了,可喜可贺,可喜可贺 ^ _ ^。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询