Orin NX

NoMachine

Downloads – Download

1
2
3
sudo apt update
sudo apt upgrade -y
sudo dpkg -i nomachine_*_arm64.deb

配置启动

  1. 配置服务器以允许远程连接

    1
    sudo systemctl start nxserver
  2. 设置NoMachine为开机启动:

    1
    sudo systemctl enable nxserver
  3. 设置EGL Captureyes,这是NoMachine提供的一个屏幕捕获功能,主要用于改善在特定显示服务器环境下的远程桌面体验:

    1
    sudo /etc/NX/nxserver --eglcapture yes

    该命令重启后生效,可使用以下命令二次确认,当出现EGL Capture has been enabled则表示该功能已写入配置文件。

    1
    if [ -f "/usr/lib/systemd/user/[email protected]" ] && grep -q "nxpreload.sh" "/usr/lib/systemd/user/[email protected]" && [ -f "/usr/share/applications/org.gnome.Shell.desktop" ] && grep -q "nxpreload.sh" "/usr/share/applications/org.gnome.Shell.desktop" && [ -f "/usr/NX/etc/node.cfg" ] && grep -q "EnableEGLCapture 1" "/usr/NX/etc/node.cfg"; then echo "EGL Capture has been enabled"; else echo "Not enabled"; fi
  4. 重启NoMachine服务:

    1
    sudo systemctl restart nxserver

重启

snap版本

刷机后snap版本是2.7.0,Jetson内核与snap2.7.0不兼容,所以用snap2.7.0安装chrome/firefox后,有问题

修复方法:回退到与 Jetson 兼容的旧版本 Snap

执行以下命令即可(安装Snap 2.68.5并锁定,使其不会被snap或apt更新)

1
2
3
4
snap download snapd --revision=24724
sudo snap ack snapd_24724.assert
sudo snap install snapd_24724.snap
sudo snap refresh --hold snapd

由于orin是arm架构因此无法安装x86 版本的chrome,只能安装 chromium,具体命令如下:

1
2
3
sudo add-apt-repository ppa:a-v-shkop/chromium
sudo apt-get update
sudo apt-get install chromium-browser

GPIO

如果要在 Jetson 中使用硬件 PWM,则需要修改 Pinmux 表来多路复用。Jetpack 提供了一个名为 jetson-io 的工具,它允许创建和更新可以使用 PWM 的 dtb。

1
sudo /opt/nvidia/jetson-io/jetson-io.py

选择 Configure Jetson 40pin Header > Configure header pins manually , pwm7(32)选择并 BackSave pin changesSave and reboot to reconfigure pins,按下任意键后重启,即可完成设置。

在使用第三方载板时,jetson-io工具无法确定载板型号。需要手动配置引脚复用。

1
2
3
4
5
6
7
8
9
10
nvidia@tegra-ubuntu:/sys/class/pwm/pwmchip4$ sudo cat /sys/kernel/debug/gpio | grep PG.06
gpio-389 (PG.06 |usbhub_power_en ) out lo
nvidia@tegra-ubuntu:/sys/class/pwm/pwmchip4$ ^C
nvidia@tegra-ubuntu:/sys/class/pwm/pwmchip4$ sudo cat /sys/kernel/debug/gpio | grep PH.00
gpio-391 (PH.00 |m2_KeyB_power_en ) out lo
nvidia@tegra-ubuntu:/sys/class/pwm/pwmchip4$
nvidia@tegra-ubuntu:/sys/class/pwm/pwmchip4$ sudo cat /sys/kernel/debug/gpio | grep PN.01
gpio-433 (PN.01 )
nvidia@tegra-ubuntu:/sys/class/pwm/pwmchip4$ sudo cat /sys/kernel/debug/gpio | grep PCC.00
gpio-328 (PCC.00 |user-led ) out lo

但是载板并没有引出PWM引脚,使用GPIO模拟。

sudo apt-get install libgpiod-dev

sudo gpioinfo

设置 GPIO 高低:sudo gpioset --mode=wait gpiochip0 106=1

sudo gpioset --mode=wait gpiochip0 106=0

opencv

https://jishuzhan.net/article/2013776823067918337

需要手动编译OpenCV 以支持 CUDA 加速

一键安装脚本,修改version (OpenCV 版本),ARCH_BIN (CUDA 算力架构),PYTHON_VERSION_NUM (Python 版本)

Jetson 设备型号 架构代号 ARCH_BIN 修改值 备注
Jetson AGX Orin Ampere “8.7” 脚本默认值
Jetson Orin NX Ampere “8.7” 与 AGX Orin 相同
Jetson Orin Nano Ampere “8.7” 与 AGX Orin 相同
Jetson AGX Xavier Volta “7.2”
Jetson Xavier NX Volta “7.2”
Jetson TX2 Pascal “6.2”
Jetson Nano (B01) Maxwell “5.3” 老款 Nano 请填这个
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#!/bin/bash
#
# Copyright (c) 2024.
# Modified for Jetson Orin NX (CUDA Arch 8.7)
# Based on instructions for OpenCV 4.10.0
#

# ================= 配置区域 (Config Area) =================

# 1. OpenCV 版本
version="4.10.0"

# 2. CUDA 算力架构 (重要!)
# Orin 系列 (AGX Orin, Orin NX, Orin Nano) -> 8.7
# Xavier 系列 -> 7.2
# Nano/TX1 -> 5.3
ARCH_BIN="8.7"

# 3. Python 版本 (根据你的系统修改)
# 运行 'python3 --version' 查看
# Jetpack 5 (Ubuntu 20.04) 通常是 3.8
# Jetpack 6 (Ubuntu 22.04) 通常是 3.10
PYTHON_VERSION_NUM="3.10"

# 工作目录
folder="workspace"

# =========================================================

set -e

# ---------------------------------------------------------
# 0. 清理旧版本交互
# ---------------------------------------------------------
for (( ; ; ))
do
echo "Do you want to remove the default OpenCV (yes/no)?"
read rm_old

if [ "$rm_old" = "yes" ]; then
echo "** Remove other OpenCV first"
sudo apt -y purge *libopencv*
break
elif [ "$rm_old" = "no" ]; then
break
fi
done

echo "------------------------------------"
echo "** Install requirement (1/4)"
echo "------------------------------------"
sudo apt-get update
# 安装基础编译工具
sudo apt-get install -y build-essential cmake git pkg-config unzip curl

# 图像/视频编解码库
sudo apt-get install -y libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
sudo apt-get install -y libv4l-dev v4l-utils qv4l2

# 图片格式库
sudo apt-get install -y libjpeg-dev libpng-dev libtiff-dev

# TBB 并行库 (兼容处理: Ubuntu 22.04 使用 libtbb12, 旧版使用 libtbb2)
sudo apt-get install -y libtbb-dev
if apt-cache search --names-only '^libtbb2$' | grep -q libtbb2; then
sudo apt-get install -y libtbb2
elif apt-cache search --names-only '^libtbb12$' | grep -q libtbb12; then
sudo apt-get install -y libtbb12
fi

# GUI 支持
sudo apt-get install -y libgtk2.0-dev

echo "------------------------------------"
echo "** Download opencv ${version} (2/4)"
echo "------------------------------------"
mkdir -p $folder
cd ${folder}

# 下载 OpenCV 源码 (增加防重复下载判断)
if [ ! -f "opencv-${version}.zip" ]; then
echo "Downloading OpenCV source..."
curl -L https://github.com/opencv/opencv/archive/${version}.zip -o opencv-${version}.zip
else
echo "opencv-${version}.zip already exists."
fi

# 下载 Contrib 源码
if [ ! -f "opencv_contrib-${version}.zip" ]; then
echo "Downloading OpenCV Contrib source..."
curl -L https://github.com/opencv/opencv_contrib/archive/${version}.zip -o opencv_contrib-${version}.zip
else
echo "opencv_contrib-${version}.zip already exists."
fi

# 解压
echo "Unzipping..."
unzip -o opencv-${version}.zip > /dev/null
unzip -o opencv_contrib-${version}.zip > /dev/null

# 清理压缩包(可选,这里保留以免重试时需要重新下载,如果空间不足可取消注释)
# rm opencv-${version}.zip opencv_contrib-${version}.zip

cd opencv-${version}/

echo "------------------------------------"
echo "** Build opencv ${version} (3/4)"
echo "------------------------------------"
mkdir -p release
cd release/

# CMake 配置
# 注意:Orin NX 使用 8.7 架构
cmake -D WITH_CUDA=ON \
-D WITH_CUDNN=ON \
-D CUDA_ARCH_BIN="${ARCH_BIN}" \
-D CUDA_ARCH_PTX="" \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-${version}/modules \
-D WITH_GSTREAMER=ON \
-D WITH_LIBV4L=ON \
-D BUILD_opencv_python3=ON \
-D BUILD_opencv_gapi=OFF \
-D BUILD_TESTS=OFF \
-D BUILD_PERF_TESTS=OFF \
-D BUILD_EXAMPLES=OFF \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local ..

echo "Compiling... This may take a while."
make -j$(nproc)

echo "------------------------------------"
echo "** Install opencv ${version} (4/4)"
echo "------------------------------------"
sudo make install

# 配置环境变量到 .bashrc
# 判断是否已经存在,避免重复写入
if ! grep -q "export LD_LIBRARY_PATH=/usr/local/lib" ~/.bashrc; then
echo 'export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
fi

# 根据 Python 版本路径配置 PYTHONPATH
SITE_PACKAGES_PATH="/usr/local/lib/python${PYTHON_VERSION_NUM}/site-packages"

if ! grep -q "export PYTHONPATH=${SITE_PACKAGES_PATH}" ~/.bashrc; then
echo "export PYTHONPATH=${SITE_PACKAGES_PATH}/:\$PYTHONPATH" >> ~/.bashrc
fi

# 提示用户手动 source
echo "------------------------------------"
echo "** Install opencv ${version} successfully"
echo "** IMPORTANT: Please run the following command to apply changes:"
echo " source ~/.bashrc"
echo "** Bye :)"

TensorRT

添加工具软链接

1
sudo ln -s /usr/src/tensorrt/bin/trtexec /usr/local/bin/trtexec

pt导出onnx(动态纬度)

1
yolo export model=best.pt format=onnx dynamic=True opset=12

转换模型

1
2
3
4
5
6
7
8
9
trtexec \
--onnx=best.onnx \
--saveEngine=yolo11n.engine \
--fp16 \
--minShapes=images:1x3x640x640 \
--optShapes=images:1x3x640x640 \
--maxShapes=images:1x3x640x640 \
--memPoolSize=workspace:4096 \
--verbose

导出batch2模型

1
2
3
4
5
6
7
8
trtexec \
--onnx=best.onnx \
--saveEngine=yolo11n_batch2.engine \
--fp16 \
--minShapes=images:2x3x640x640 \
--optShapes=images:2x3x640x640 \
--maxShapes=images:2x3x640x640 \
--verbose