Rk1820/rk1828 开发避坑与工具链梳理

最近在用 RK3588 搭配 RK1820/RK1828 做端侧 AI 推理,整理了一些关于架构、工具链和遇到的一些小坑,分享一下,希望能帮大家少走点弯路。

一、 硬件架构是怎么分工的?

它是典型的主从异构架构。简单理解就是:

  • 主控(RK3588):负责系统的干活,比如系统调度、资源分配、外设通信等。
  • 协处理器(RK1820/RK1828):专职 AI 计算,通过 PCIe 高速接口和主控通信。这种设计的好处是跑大模型推理时不会抢占主控的资源,系统依然能保持流畅。

二、 状态监控工具 rknn-smi

这就相当于 N 卡生态里的 nvidia-smi,日常开发基本离不开它。几个常用命令记一下就行:

  • 查软件版本:sudo rknn-smi -v
  • 查硬件信息:sudo rknn-smi info -l
  • 实时监控状态:sudo rknn-smi info -w
  • 切性能模式:sudo rknn-smi set -t work_mode -s 2
  • 查功耗:sudo rknn-smi info -t power (注意:目前硬件不支持这个命令,跑了也没用)

详细的用法可以直接看 SDK 里的 docs/Tools/Rockchip_User_Guide_RKNN-SMI_Tool_CN.pdf

三、 踩坑记录:概率性 “Failed to initialize rknnsmi”

刚上电的时候,偶尔会遇到 rknn-smi 初始化失败的报错。查了下,主要是服务启动时序的问题,底层还没完全就绪,服务就急着去查了。

解决办法:
给 systemd 服务加个延时。编辑 /lib/systemd/system/rknn3.service,在 [Service] 下面加一行 ExecStartPre=/bin/sleep 3,让它等个 3 秒再启动。改完大概长这样:

[Unit]
Description=rknn3 runtime service
DefaultDependencies=no
After=local-fs.target

[Service]
Type=forking
ExecStartPre=/bin/sleep 3 # 加个3秒延迟
ExecStart=/bin/rknn3_startup start
ExecStop=/bin/rknn3_startup stop

[Install]
WantedBy=sysinit.target

保存后重启服务或者重启板子,基本就不会再报这个错了。

四、 SDK 目录和工具链梳理

SDK 的 rknn 目录下主要是这几个东西:

rknn/
├── rknn3-model-zoo
├── rknn3-runtime
├── rknn3-toolkit
└── rknn-gstreamer-plugins
  • rknn3-model-zoo:官方提供的模型部署示例,建议新手直接从这里跑起。
  • rknn3-runtime:板端的运行时库,C/C++ 接口,写应用调它。
  • rknn-gstreamer-plugins:GStreamer 相关的插件。

避坑:
PC 端的模型转换工具是 RKNN3 Toolkit。要注意,它和以前的 RKNN-ToolkitRKNN-Toolkit2 完全不兼容!千万别下错版本或者混用,不然转换模型的时候会各种报错。