快速开始
跑通第一个示例程序,本章详细说明"主机工具链 → SDK → 交叉编译 → 部署到板端 → SSH/SCP 验证"全链路。
整体框图
PC (Ubuntu x86_64) 主控板 (aarch64)
───────────────────── ─────────────
apt install 工具链 /tmp/hello_rk182x
│ │
▼ ▼
aarch64-linux-gnu-gcc ─────scp/ssh────────────► ./hello_rk182x → Hello RK182X!本文示例程序运行在 RK3588、RK3576 等主控板的 AArch64 Linux 上。RK182X 作为协处理器,不直接运行普通 Linux 用户态程序;如果使用 RTOS 或专用固件,应使用 SDK 提供的专用固件工具链。
1. 前置条件
| 要求 | 最低配置 | 推荐配置 |
|---|---|---|
| 主机系统 | Ubuntu 20.04 或兼容 Linux | Ubuntu 22.04 LTS |
| 磁盘空间 | 30 GB | 50 GB SSD |
| 内存 | 8 GB | 16 GB |
| 网络 | 能获取 SDK 和依赖 | 稳定网络 |
| 开发板 | AArch64 Linux 主控板 | RK3588/RK3576 + RK182X |
| 连接方式 | SSH、串口或 ADB | SSH 网络连接 |
确认目标板架构:
uname -m输出:
aarch642. 装基础依赖
Debian/Ubuntu 系统:
sudo apt update
sudo apt install -y \
build-essential \
gcc-aarch64-linux-gnu \
g++-aarch64-linux-gnu \
binutils-aarch64-linux-gnu \
git wget curl file openssh-client验证工具链:
aarch64-linux-gnu-gcc --version
aarch64-linux-gnu-g++ --version
file --version输出:
$ aarch64-linux-gnu-gcc --version
aarch64-linux-gnu-gcc (Debian 12.2.0-14+deb12u1) 12.2.0
$ aarch64-linux-gnu-g++ --version
aarch64-linux-gnu-g++ (Debian 12.2.0-14+deb12u1) 12.2.0
$ file --version
file-5.44
magic file from /etc/magic:/usr/share/misc/magic没开发板也可以装 QEMU:
sudo apt install -y qemu-user-static libc6-arm64-cross要 RKNN 模型转换的话用 venv:
sudo apt install -y python3 python3-pip python3-venv
python3 -m venv "$HOME/venvs/rk182x"
source "$HOME/venvs/rk182x/bin/activate"
python -m pip install --upgrade pip
python -m pip install numpy pillow onnxRKNN Toolkit 的具体安装包和 Python 版本要求,应以对应 SDK 发布说明为准。
3. 获取 SDK
SDK 获取方式取决于项目权限和 Rockchip 发布方式,可能是 Git 仓库、repo 工程或压缩包。
# 路径变量(常见取值 $HOME/rk182x-sdk)
export RK182X_SDK="$HOME/rk182x-sdk"
# 从授权仓库获取(地址和版本替换为实际值)
git clone --branch "<SDK_TAG>" \
"<AUTHORIZED_SDK_REPOSITORY_URL>" \
"$RK182X_SDK"
cd "$RK182X_SDK"如果 SDK 已存在,直接设置路径:
export RK182X_SDK="/userdata/RK1820_RK1828_AI_SDK"
cd "$RK182X_SDK"检查目录:
find "$RK182X_SDK" -maxdepth 2 -type d | sort输出(部分):
/userdata/RK1820_RK1828_AI_SDK
/userdata/RK1820_RK1828_AI_SDK/docs
/userdata/RK1820_RK1828_AI_SDK/driver
/userdata/RK1820_RK1828_AI_SDK/driver/pcie-rkep
/userdata/RK1820_RK1828_AI_SDK/examples
/userdata/RK1820_RK1828_AI_SDK/examples/anomaly-detection
/userdata/RK1820_RK1828_AI_SDK/examples/docker
/userdata/RK1820_RK1828_AI_SDK/examples/gstreamer
/userdata/RK1820_RK1828_AI_SDK/examples/rockit_yolo_detect
/userdata/RK1820_RK1828_AI_SDK/examples/vi_yolo_venc
/userdata/RK1820_RK1828_AI_SDK/examples/web
/userdata/RK1820_RK1828_AI_SDK/output
/userdata/RK1820_RK1828_AI_SDK/package
/userdata/RK1820_RK1828_AI_SDK/pkgroot
/userdata/RK1820_RK1828_AI_SDK/rknn
/userdata/RK1820_RK1828_AI_SDK/rknn/rknn3-model-zoo
/userdata/RK1820_RK1828_AI_SDK/rknn/rknn3-runtime
/userdata/RK1820_RK1828_AI_SDK/rknn/rknn3-toolkit
/userdata/RK1820_RK1828_AI_SDK/rknn/rknn-gstreamer-plugins
/userdata/RK1820_RK1828_AI_SDK/scripts不同版本 SDK 目录结构可能不同,常见目录:
rk182x-sdk/
├── docs/ # SDK 文档
├── examples/ # 示例程序
├── driver/ # 驱动源码
├── rknn/ # RKNN Toolkit、Runtime 或 Model Zoo
├── scripts/ # 编译和部署脚本
├── output/ # 编译输出
└── pkgroot/ # 目标板运行库或工具4. 配置交叉编译环境
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-验证:
printf 'ARCH=%s\n' "$ARCH"
printf 'CROSS_COMPILE=%s\n' "$CROSS_COMPILE"
"${CROSS_COMPILE}gcc" --version输出:
ARCH=arm64
CROSS_COMPILE=aarch64-linux-gnu-
aarch64-linux-gnu-gcc (Debian 12.2.0-14+deb12u1) 12.2.0永久生效:
echo 'export RK182X_SDK="/userdata/RK1820_RK1828_AI_SDK"' >> "$HOME/.bashrc"
echo 'export CROSS_COMPILE=aarch64-linux-gnu-' >> "$HOME/.bashrc"
echo 'export ARCH=arm64' >> "$HOME/.bashrc"
source "$HOME/.bashrc"5. 编译并运行第一个程序
创建 hello_rk182x.c:
#include <stdio.h>
#include <unistd.h>
int main(void)
{
printf("Hello RK182X!\n");
printf("PID: %d\n", getpid());
return 0;
}5.1 主机端交叉编译
aarch64-linux-gnu-gcc \
-Wall \
-Wextra \
-O2 \
hello_rk182x.c \
-o hello_rk182x检查二进制:
file hello_rk182x输出:
hello_rk182x: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=48533707313881615a22527bb4743e308ce86943, for GNU/Linux 3.7.0, not strippedUbuntu 新版本 GCC 默认生成 PIE,显示
pie executable是正常的。
进一步确认架构:
readelf -h hello_rk182x | head -20输出(关键行):
系统架构: AArch645.2 在开发板上运行
设置开发板信息:
export TARGET_USER=linaro
export TARGET_IP=<开发板IP>
export TARGET="$TARGET_USER@$TARGET_IP"确认开发板架构:
ssh "$TARGET" 'uname -m'输出:
aarch64复制并运行:
scp hello_rk182x "$TARGET:/tmp/"
ssh "$TARGET" \
'chmod +x /tmp/hello_rk182x && /tmp/hello_rk182x'输出:
Hello RK182X!
PID: 240275.3 直接在板上编译
板上已有原生 GCC:
gcc hello_rk182x.c -o hello_rk182x
./hello_rk182x6. 常见问题
| 现象 | 原因 | 处理 |
|---|---|---|
Exec format error | AArch64 程序跑在 x86_64 上 | QEMU 跑:qemu-aarch64-static -L /usr/aarch64-linux-gnu ./hello_rk182x,或推到 aarch64 板上跑 |
找不到 /lib/ld-linux-aarch64.so.1 | 动态链接目标板运行时库缺失 / QEMU sysroot 错 | ls -l /lib/ld-linux-aarch64.so.1 + 检查 -L 路径 |
| 交叉编译器命令不存在 | 工具链没装 / 前缀错 | apt install gcc-aarch64-linux-gnu + command -v aarch64-linux-gnu-gcc |
| SSH 连不上开发板 | IP / 用户名 / 网络错 | ping <IP> + ssh <user>@<IP> 检查 |
