
目录前言1. Jetson AGX Orin套件开箱与接口介绍2. 初次开机与基础设置3. 远程登陆配置4. 远程桌面配置安装xrdp和xorgxrdp配置xrdp远程桌面连接使用xfce可选6. 远程文件传输7. C与CUDA混合编程开发环境配置编译器——GCCG跨平台构建系统生成工具——Cmake构建自动化工具——makeGPU开发套件——CUDAnvccJetson配套的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与网络连接的外设之间进行通信时局域网是十分基础且重要的概念。局域网LANLocal 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的过程中有可能出现直接连接时发生闪退的现象在使用cludedeepseek进行分析后得到以下解决方案问题分析~/.xsessionrc第 83 行remove_apps(“thunderbird” “rhythmbox” “libreoffice-writer”)这是bash 数组语法但/etc/X11/Xsession使用/bin/shUbuntu 上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” ]; thenremove_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.shellfavorite−apps)forappin{remove_apps[]}”; dofavorite_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−es/,′{app}.desktop’ / /g”)donegsettings set org.gnome.shell favorite-apps “${favorite_apps}”fi使用信号使用”“注释掉然后在其后面添加如下代码小贴士vim中的粘贴键为shiftinsertif [ -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然后修改~/.xsessionechostartxfce4~/.xsessionchmodx ~/.xsession重启 xrdp和机器sudosystemctl restart xrdpsudorebootnowXFCE 在远程桌面下比 GNOME 稳定得多并且肉眼可见的流畅。但是肉眼可见的简陋如果想要改回去删除~/.xsession 重启即可rm~/.xsessionsudosystemctl restart xrdpsudorebootnow6. 远程文件传输远程连接仅仅解决了远程操作的问题但没有解决文件传输的问题主流的文件传输协议有两种FTP与SFTP。FTP文件传输协议是一种诞生于互联网早期的标准网络协议其核心功能是在客户端与服务器之间进行文件的上传、下载和目录浏览等操作。它最大的特点是采用明文传输即用户身份凭证和所有数据在网络上均未加密安全风险极高并且需要分别建立命令21端口和数据20端口或随机端口两条独立的连接通道即“带外”管理这种模式在防火墙和NAT环境下配置非常复杂。与SFTP相比它的主要优势在于协议简单、传输效率较高但若未搭配TLS/SSL即FTPS则极不推荐用于传输敏感信息且与现代网络安全环境兼容性较差。SFTPSSH文件传输协议并非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、g9.4.0cmake3.16.3makeGNU Make 4.2.1cudaToolkit、nvcc11.4.19-1JetsonGPIOC版1.2.5Redis5.0.4VSCode1.85.2SpdLog1.x下面分别对这些开发环境进行简单介绍、新机器的版本检查及安装编译器——GCCGgcc 是 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 Gsudoaptupdatesudoaptinstallgcc g安装完成后再查询得到以下结果即安装成功。跨平台构建系统生成工具——CmakeCMake 是一个跨平台的构建系统生成器。它读取CMakeLists.txt文件自动生成 Makefile 或其他构建系统所需的配置文件。使用 CMake 管理编译过程 — 查找依赖库CUDA、OpenCV、JetsonGPIO、设置编译选项C17、CUDA C11、组织源文件。CMake 3.16 及以上版本对 CUDA 语言支持更好。可以使用以下命令进行版本查询cmake--version|head-1在新Orin上运行后得到如下结果可以看到出厂自带套件不含有cmake我们需要手动安装一下cmake3.16.3# 系统包管理器安装Ubuntu 20.04 默认版本为 3.16.3sudoaptinstallcmake安装完成后再次使用查询命令即可正常返回版本号构建自动化工具——makeMake 是一个自动化构建工具根据 Makefile 中定义的规则执行编译。CMake 生成 Makefile 后由 Make 驱动实际的编译过程。可以使用以下命令进行版本检查make--version|head-1make作为常用的底层工具一般Ubuntu系统都自带如果真的没有也可以通过apt安装sudoaptinstallmakeGPU开发套件——CUDAnvccCUDA (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]echoCUDA 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 上直接 aptsudoaptupdatesudoaptinstallcuda-toolkit-11-4完成CUDA套件安装后再将nvcc 加入 PATH# 找到 CUDA 安装路径通常为 /usr/local/cuda-11.4CUDA_PATH$(dirname$(dirname$(which nvcc2/dev/null||echo/usr/local/cuda-11.4/bin/nvcc)))echoexport PATH${CUDA_PATH}/bin:\$PATH~/.bashrcechoexport 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-4cuDNN 8.xlibcudnn8,libcudnn8-devTensorRT 8.5tensorrt,libnvinfer-devOpenCV 4.5nvidia-opencv,nvidia-opencv-devVPI 5.xnvidia-vpi,nvidia-vpi-dev多媒体nvidia-l4t-multimedia因为官方已经配好源了所以可以用以下命令自动安装它会自动拉入全部依赖sudoaptupdatesudoaptinstallnvidia-jetpack由于暂时用不到深度学习这里只安装CUDA套件安装完后的查询结果如下Jetson配套的IO控制——JetsonGPIOJetsonGPIO 是 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~/JetsonGPIOmkdirbuildcdbuild cmake..makesudomakeinstall正确安装完成后可以通过以下命令验证是否安装成功# 头文件ls/usr/local/include/JetsonGPIO.h# 库文件ls/usr/local/lib/libJetsonGPIO.*# CMake 能找到这个库有提供 CMake configls/usr/local/lib/cmake/JetsonGPIO/如果成功将会有以下结果远程字典服务——RedisRedis (Remote Dictionary Server) 是一个开源的、基于内存的键值对 (Key-Value) 存储系统。它支持多种数据结构字符串、哈希、列表、集合、有序集合所有数据保存在内存中同时支持异步持久化到磁盘。因其极高的读写性能10万 QPS被广泛用于缓存、消息队列、实时分析、会话管理等场景。Redis 的核心特性内存存储 | 全部数据在 RAM 中读写延迟亚毫秒级持久化 | 支持 RDB 快照和 AOF 日志两种方式发布/订阅 | 内置消息队列机制支持频道订阅和模式匹配网络模型 | 单线程事件循环 I/O 多路复用无锁竞争客户端库 | 主流语言均有对应的客户端库C → hiredisPython → redis-pyC → redis-plus-plus 等我们先安装Redis服务sudoaptupdatesudoaptinstallredis-server# 验证、应返回 PONGredis-clipinghiredis 是 Redis 官方开发和维护的 C 语言客户端库。它提供了一套极简、非阻塞的 API负责处理连接管理— 建立/维持与 Redis Server 的 TCP 连接命令发送— 将 Redis 命令序列化为 RESP (REdis Serialization Protocol) 协议格式并发送响应解析— 接收并解析 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代码编辑器——VSCodeVS Code 是微软开发的开源代码编辑器支持语法高亮、智能补全 (IntelliSense)、调试、Git 集成等并通过扩展系统支持几乎所有编程语言。在 Jetson 平台上VS Code 用于浏览和编辑项目的 C/CUDA 源码配合扩展实现代码补全、CMake 构建集成和 CUDA-GDB 调试。检查命令# 查看 VS Code 是否安装及版本whichcodecode--version|head-1# 查看已安装的扩展code --list-extensionsL4T系统下没有预装vscode,咱们手动安装#手动安装 ARM64 版本vscodecd~wget-Ovscode.debhttps://code.visualstudio.com/sha/download?buildstableoslinux-deb-arm64sudodpkg-ivscode.debsudoaptinstall-f安装完成后可以在home下新建一个VSCode工作目录~~养成良好的编程习惯~~在远程桌面中打开工作目录终端输入 code . 即可打开VSCode界面了VSCode具有海量的扩展插件可以通过插件市场进行浏览与安装这里推荐几款插件轻量化的日志库——SpdLogspdlog 是一个超高速、纯头文件的 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 从开箱到环境部署就都完成了可喜可贺可喜可贺 ^ _ ^。