Hello RK1828
上一节跑通了纯打印的 Hello World。本节检测 RK1828 的 PCIe 设备节点,把 NPU 设备信息打印出来。
整体框图
Host SoC (RK3588) RK1828 (PCIe 协处理器)
───────────────────── ─────────────────────
应用 CPU + 系统调用 无应用 CPU
│ │
▼ │
运行 hello_rk1828(检测 PCIe) │
│ │
▼ │
PCIe Gen3 x4 → /dev/dri/renderD128 ────────► NPU 推理入口1. 前置条件
| 条件 | 说明 |
|---|---|
| Host SoC(RK3588)已烧写固件并启动 | 提供 OS 与 CPU |
| 交叉编译工具链已安装 | aarch64-linux-gnu-gcc |
Host 上有 PCIe 设备 0004:41:00.0 | 标识 RK1828 |
2. 写代码
新建文件 hello_rk1828.c:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/sysinfo.h>
int main(int argc, char **argv) {
printf("================================\n");
printf(" Hello RK1828!\n");
printf("================================\n\n");
struct sysinfo info;
sysinfo(&info);
printf("系统运行时间: %ld 秒\n", info.uptime);
printf("总内存: %ld MB\n", info.totalram / 1024 / 1024);
printf("空闲内存: %ld MB\n", info.freeram / 1024 / 1024);
printf("\n--- /proc/cpuinfo (摘要) ---\n");
system("grep -m1 'model name' /proc/cpuinfo 2>/dev/null || "
"grep -m1 'CPU implementer' /proc/cpuinfo");
system("grep -m1 'BogoMIPS' /proc/cpuinfo");
printf("\n--- RK1828 NPU 设备 (PCIe) ---\n");
system("ls -l /dev/dri/renderD128 2>/dev/null && "
"echo 'RK1828 PCIe 设备就绪' || "
"echo '未发现 RK1828 设备,请检查 PCIe链接'");
printf("\n--- PCIe 拓扑 ---\n");
system("lspci -s 0004:41:00.0 2>/dev/null || echo 'lspci 未找到该地址'");
printf("\n程序执行完毕。\n");
return 0;
}3. 编译
aarch64-linux-gnu-gcc hello_rk1828.c -o hello_rk1828 -static
# 验证
file hello_rk1828输出:
hello_rk1828: ELF 64-bit LSB executable, ARM aarch64, version 1 (GNU/Linux), statically linked, BuildID[sha1]=669625d82ce36b9b5617b050831b8bb203190fbe, for GNU/Linux 3.7.0, not stripped用
-static可以避免开发板 libc 版本不匹配的问题。
4. 部署
scp
scp hello_rk1828 root@<Host SoC IP>:/tmp/NFS / Samba 挂载
适合频繁迭代的开发方式。
U 盘 / SD 卡
cp hello_rk1828 /media/$USER/USBDRIVE/5. 跑起来
预期输出:

系统运行时间 / 空闲内存 / /dev/dri/renderD128时间戳是动态值,每次跑会不一样。
6. 单独验证关键节点
PCIe 设备详情:
lspci -s 0004:41:00.0输出:
0004:41:00.0 Processing accelerators: Rockchip Electronics Co., Ltd Device 182a (rev 01)/dev/dri/renderD128 设备节点:
ls -l /dev/dri/renderD128输出(实测):
crw-rw----+ 1 root render 226, 128 8月20日 16:56 /dev/dri/renderD128/dev/dri/ 目录内容:
ls /dev/dri/输出:
by-path
card0
card1
renderD128
renderD129RK1828 PCIe 设备验证成功:设备节点
/dev/dri/renderD128存在,对应 PCIe 设备0004:41:00.0(Rockchip Device 182a)。
7. 调 RK1828 NPU
Hello World 只是入门,要真正用 RK1828 的 NPU,还是得通过 PCIe 调 rkllm3-server:
# 启动 NPU 推理服务(在 Host 上执行)
rkllm3-server -m <model.rknn> -c 0xff -n 4096
# -m 模型文件路径
# -c NPU core mask(8 核用 0xff)
# -n 最大生成 token 数详见 Hello World 第 6 节。
8. 常见问题
| 现象 | 原因 | 处理 |
|---|---|---|
cannot execute binary file | 架构不匹配 | 确认用 aarch64-linux-gnu-gcc 编译 |
not found / 缺库 | 动态链接缺失 | 加 -static 或在 Host 上 ldd 检查 |
Permission denied | 无执行权限 | chmod +x |
| 程序跑通但 NPU 不工作 | 检测了错误的设备路径 | RK1828 设备节点是 /dev/dri/renderD128 |
rkllm3-server 跑一会儿崩 | KV cache 残留 | 重启服务 |
相关文档
- Hello World — 基础入门
- 硬件架构概述 — 硬件规格
- NPU 子系统 — NPU 推理
