跳到主要内容

常见问题 - SDK相关

当前 SDK 信息

这是一个基于 Rockchip RV1126/RV1109YOLOv5 目标检测流处理项目

通过查看项目结构和关键文件,可以得出以下信息:

警告

RV1126 / RV1126B-p 注意区分

跳转到 RV1126 SDK | 跳转到 RV1126B-p SDK


📁 RV1126 SDK 文件下载

链接: https://pan.baidu.com/s/1OSdhBi32C13lBNVC-Sz63w?pwd=fanc

提取码: fanc 复制这段内容后打开百度网盘手机App,操作更方便哦


编译方式参考

RV1126 编译固件


📋 项目摘要

条目内容
项目类型Rockchip RV1126/RV1109 平台嵌入式开发 + AI 视觉(YOLOv5)
核心芯片RV1126 / RV1109(Rockchip AIoT SoC,带 NPU,ARM 32 位)
AI 模型YOLOv5(目标检测,基于 RKNN)
操作系统/构建系统Buildroot、Debian
Linux 内核4.19(kernel/
关键文件Makefile, build.sh, kernel, rkflash.sh, RV1126_YOLOV5_DEPLOY_STREAM_PLAN.md

📁 主要目录结构说明

目录作用
app/应用程序代码(rkipc IPC、ipcweb-backend、YOLOv5 相关样例等)
buildroot/Buildroot 构建系统配置
debian/Debian 根文件系统
device/设备树、板级配置、SDK 构建脚本
docs/项目文档(含 RV1126_RV1109_Release_Note.txt
external/第三方依赖库(rkmediarknpucamera_engine_rkaiq 等)
kernel/Linux 内核源码(4.19)
prebuilts/预编译工具链/二进制文件
rkbin/Rockchip 固件/二进制文件(BL31、DDR init 等)
tools/打包、烧录等工具脚本
u-boot/U-Boot 引导加载器

🔍 关键文件备注

  • RV1126_YOLOV5_DEPLOY_STREAM_PLAN.md — 本项目的核心说明/计划文档,描述如何在 RKMedia 样例上接入 YOLOv5 并实现 RTSP 推流。
  • build.sh — 主构建脚本。
  • rkflash.sh — 烧录脚本(将固件刷入 RV1126 板子)。
  • config.sh — 网络/RTSP 等运行时配置辅助脚本。

常用代码位置

RV1126 SDK Linux V3.0.1

当前仓库对应版本:rv1126_rv1109_linux_v3.0.1_20230330

标准 IPC 产品默认使用 RKMedia 方案(rv1126_ipc_rkmedia),已集成网页预览和 RTSP/RTMP 推流。

版本信息见:docs/RV1126_RV1109/RV1126_RV1109_Release_Note.txt

快速入门文档:docs/RV1126_RV1109/Rockchip_RV1126_RV1109_Quick_Start_Linux_CN.pdf


IPC 源码

标准 defconfig:buildroot/configs/rockchip_rv1126_rv1109_defconfig

位置作用
app/rkipc/src/rv1126_ipc_rkmedia/默认 IPC 主程序(RKMedia 方案,main.cvideo/、各传感器 ini)
app/rkipc/src/rv1126_ipc_rockit/IPC 备选方案(Rockit 方案,结构类似)
app/rkipc/src/rv1126_battery_ipc/电池类 IPC(涂鸦云、休眠唤醒)
app/rkipc/src/rv1126_snapshot/抓拍类产品
app/rkipc/common/公共模块(编码、网络、OSD、存储、ISP 等)
app/rkipc/common/isp/rv1126/RV1126 ISP 封装(畸变校正、降噪等)
external/rkmedia/RKMedia 媒体框架
external/camera_engine_rkaiq/ISP 算法库(RKAIQ)
buildroot/configs/rockchip_rv1126_rv1109_defconfig标准 IPC 产品 defconfig
buildroot/board/rockchip/rv1126_rv1109/fs-overlay-sysv/启动脚本等 overlay

产品变体对照:

编译选项源码目录媒体框架
BR2_PACKAGE_RKIPC_RV1126rv1126_ipc_rkmediaRKMedia(默认)
COMPILE_FOR_RV1126_ROCKITrv1126_ipc_rockitRockit
COMPILE_FOR_RV1126_BATTERY_IPCrv1126_battery_ipcRockit
COMPILE_FOR_RV1126_SNAPSHOTrv1126_snapshotEasyMedia

怎么改:

  • 业务逻辑 → rv1126_ipc_rkmedia/ + common/
  • 分辨率/码流参数 → rkipc-*.ini(如 rkipc-imx415.ini
  • 开机启动 → fs-overlay-sysv/etc/init.d/S98_lunch_init/oem/usr/bin/RkLunch.sh
  • 改完在 SDK 根目录:./build.sh(或单独重编 rkipc 包)

YOLOv5 + RTSP 推流

本项目的核心改造目标。最推荐在 RKMedia 推流样例上改造,最小代价实现"检测 + 框绘制 + 推流"。

位置作用
external/rkmedia/examples/rkmedia_vi_rknn_venc_rtsp_test.c推流主链路(VI → RKNN → VENC → RTSP),在此替换 SSD 为 YOLOv5
external/rknpu/rknn/rknn_api/examples/rknn_yolov5_demo/src/main.ccYOLOv5 推理参考
external/rknpu/rknn/rknn_api/examples/rknn_yolov5_demo/src/postprocess.ccYOLOv5 后处理参考
external/rkmedia/examples/rtsp-nn.cfgRTSP 双码流配置(主码流/子码流)
external/rkmedia/examples/CMakeLists.txtRKMedia examples 编译入口

怎么改:

  • 模型路径/输入尺寸 → rkmedia_vi_rknn_venc_rtsp_test.c 中的 g_ssd_pathMODEL_INPUT_SIZE
  • 后处理逻辑 → 新建 yolov5_postprocess.cc/.h,参考 rknn_yolov5_demo
  • 编译 → 修改 CMakeLists.txt 把后处理源文件加入目标
  • 码流配置 → rtsp-nn.cfg 调整主/子码流分辨率
  • 推流地址 → rtsp://<board_ip>/live/main_stream

详细步骤见:RV1126_YOLOV5_DEPLOY_STREAM_PLAN.md


WEB 前端

位置作用
app/ipcweb-backend/www-rkipc/前端静态页(Angular 打包产物,.js / .css
app/ipcweb-backend/src/Web 后端 API*_api.cpprest_api.cpp
app/ipcweb-backend/ipcweb-env-arm/etc4oem/nginx/Nginx 配置(RV1126 为 ARM 32 位)

设备上部署路径:/usr/www(由 buildroot 的 ipcweb-backend.mk 安装)。

怎么改:

  • 改页面/UI:SDK 里只有编译后的 www-rkipc没有 Angular 源码;需向 Rockchip 要前端工程,或只能直接改静态资源(难维护)
  • 改接口/功能:改 ipcweb-backend/src/*_api.cpp,后端通过 socket 与 rkipc 通信
  • 改完重编 ipcweb-backend 包并刷机

关系: 浏览器 → Nginx → entry.cgi(ipcweb-backend)→ socket → rkipc


IVA 人形/人脸

RV1126 标准 IPC(rv1126_ipc_rkmedia)与 RV1126B 不同:默认不走 RockIVA,而是用 IVM 闭源库。

1. IVM 算法库(闭源,只能调 API)

路径内容
app/rkipc/common/ivm/ivm_dependent.hIVM API 头文件(人形/人脸/车辆检测、区域入侵等类型定义)
app/rkipc/common/ivm/event.cIVM 事件处理(当前大部分逻辑已注释,未启用
app/rkipc/lib/arm-rockchip830-linux-gnueabihf/libivm_share.so预编译 IVM 库

IVM 检测类型(ivm_dependent.h):

  • IVM_DRAW_PEOPLE — 人形
  • IVM_DRAW_FACE — 人脸
  • IVM_DRAW_CAR — 车辆

2. 应用层(可改源码)

路径作用
app/rkipc/common/ivm/event.cIVM 初始化、送帧、画框(当前已注释)
app/rkipc/common/event/event.c区域入侵参数读写(ini 配置存取,无实际检测逻辑
app/rkipc/src/rv1126_ipc_rkmedia/rkipc-*.ini[event.regional_invasion] 参数
app/rkipc/src/rv1126_ipc_rkmedia/video/video.c视频链路(event_process 调用已注释)
app/rkipc/common/rockiva/rockiva.cRockIVA 源码(存在但 rv1126_ipc_rkmedia 未编译链接

Web 侧区域入侵配置:app/ipcweb-backend/src/event_api.cpp

3. 当前 IPC 实际状态

标准 rv1126_ipc_rkmedia 构建中:

  • CMakeLists.txt 编译了 common/ivm,但 ivm/event.c 中检测逻辑几乎全部注释
  • common/event/event.c 仅做 ini 参数读写,rk_event_init() 为空实现
  • video.cevent_process() 调用已注释
  • 区域入侵 Web 配置可用,但实际 AI 检测未跑起来

如需人脸闸机类产品,可参考 defconfig:rockchip_rv1126_rv1109_facial_gate_defconfig

4. 应该怎么改

需求改哪里
开关/灵敏度/检测区域rkipc-*.ini[event.regional_invasion]
启用人形/人脸检测(IVM)恢复 common/ivm/event.c 中被注释的代码,并在 video.c 中重新启用 event_process()
接入 RockIVA需在 CMakeLists.txt 中加入 common/rockiva 编译和 librockiva 链接(SDK 中 external/iva/ 预编译库,需自行获取)
自定义 YOLOv5 检测 + 推流改造 external/rkmedia/examples/rkmedia_vi_rknn_venc_rtsp_test.c(推荐,见上文)
改框颜色/样式ivm/event.crkmedia_vi_rknn_venc_rtsp_test.c 中的绘制逻辑
改检测模型本身IVM/RockIVA 均为闭源,只能换 .so 或向 Rockchip 要新库

改完重编 rkipc 包并刷机。


两种抗畸变方式

有镜头抗畸变相关代码。
RV1126 使用 ISP2.0(rk_aiq_user_api_imgproc.h),畸变校正通过 RKAIQ 的 LDCH / FEC 接口实现。

模式说明硬件/模块
LDCH横向镜头畸变校正(轻量)ISP / RKAIQ
FEC鱼眼/大畸变镜头校正ISP / RKAIQ(FEC 算法)

默认均为 close

与 RV1126B 的差异:RV1126 标准 IPC 没有 GDC 硬件通道,FEC 走 ISP 软件校正,不支持 RV1126B 那套 fec_ini_file + GDC 标定流程。Web 页面畸变选项仅支持 LDCH / close


代码位置

应用层(主要改这里)

文件作用
app/rkipc/common/isp/rv1126/isp.crk_isp_set_distortion_correction()rk_isp_set_ldch_level()rk_isp_set_fec_level()
app/rkipc/src/rv1126_ipc_rkmedia/rkipc-*.ini[isp.0.enhancement] 配置项
app/ipcweb-backend/src/image_api.cppWeb 设置畸变参数

底层算法/驱动

路径作用
external/camera_engine_rkaiq/rkisp/RKAIQ ISP 算法(rk_aiq_uapi_setLdchEnsetFecEn 等)
kernel/drivers/media/platform/rockchip/isp/ISP 内核驱动

文档

  • app/rkipc/docs/Rockchip_Developer_Guide_Linux_RKIPC_CN.md(RV1126 IPC 数据流、LDCH/FEC 说明)

用法

1. 改 ini(最直接)

app/rkipc/src/rv1126_ipc_rkmedia/rkipc-xxx.ini[isp.0.enhancement]

distortion_correction = LDCH   ; 或 FEC / close
ldch_level = 50 ; 0~100,仅 LDCH 有效
fec_level = 50 ; 0~100,仅 FEC 有效
fec = close ; FEC 开关(部分 ini 有此字段)

2. Web 页面

图像增强 → sDistortionCorrectionLDCH / close)+ iLdchLevel

RV1126 Web 端不支持 FEC 选项(文档中 sDistortionCorrection 的 options 为 ["LDCH","close"])。

3. 运行时 API

rk_isp_set_distortion_correction(0, "LDCH");  // 或 "FEC" / "close"
rk_isp_set_ldch_level(0, 50);
rk_isp_set_fec_level(0, 50);

4. LDCH 与 FEC 差异

  • LDCH:ISP 内联校正,开销小,普通镜头推荐
  • FEC:ISP FEC 算法校正,适合鱼眼/大畸变镜头,开销更大

换镜头 / 新板子怎么做

  1. 小畸变普通镜头 → 用 LDCH,调 ldch_level 即可。
  2. 大畸变/鱼眼 → 用 FEC,调 fec_level;精细系数可在 RKAIQ IQ JSON 的 ldc 段配置。
  3. 板级差异主要在 kernel/arch/arm/boot/dts/rockchip/rv1126-evb*.dts,与畸变算法本身无关。

系统调试

NPU 负载查看

# 查看 NPU 当前频率
cat /sys/class/devfreq/ffbc0000.npu/cur_freq

# 查看 debugfs 时钟(若已挂载 debugfs)
cat /sys/kernel/debug/clk/clk_npu_pll/clk_rate

NPU 频率调整

RV1126 的 NPU devfreq 节点是 ffbc0000.npu(与 RV1126B 的 22000000.npu 不同)。

root@rv1126-buildroot:/sys/class/devfreq# ls
ffbc0000.npu ...

启动时 S05NPU_init 默认将 NPU 设为最高频率(userspace 模式):

read MAX_FREQ < /sys/class/devfreq/ffbc0000.npu/max_freq
echo $MAX_FREQ > /sys/class/devfreq/ffbc0000.npu/userspace/set_freq

✅ 推荐操作:保持自动调频

# 查看可用调频策略
cat /sys/class/devfreq/ffbc0000.npu/available_governors

# 设为 ondemand 自动调频(若支持)
echo ondemand > /sys/class/devfreq/ffbc0000.npu/governor
cat /sys/class/devfreq/ffbc0000.npu/governor

🔧 手动固定频率(调试用)

  1. 查看支持的频率列表

    cat /sys/class/devfreq/ffbc0000.npu/available_frequencies

    RV1126 NPU 常见档位如 200MHz、300MHz、400MHz、500MHz、600MHz 等(以实际输出为准)。

  2. 改为 userspace 模式

    echo userspace > /sys/class/devfreq/ffbc0000.npu/governor
  3. 设置目标频率(例如 600000000 Hz):

    echo 600000000 > /sys/class/devfreq/ffbc0000.npu/userspace/set_freq
  4. 确认当前频率

    cat /sys/class/devfreq/ffbc0000.npu/cur_freq

📌 注意事项

  • 手动固定频率后,NPU 将不再根据负载自动调节,可能导致过热或不必要的功耗,建议调试完成后恢复自动调频。
  • 如果用 RKNN API 跑模型,通常驱动会自动管理频率,无需手动调整。只有需要性能压测或功耗优化时才需干预。
  • SDK 自带 NPU 调频测试脚本:external/rockchip-test/npu2/npu_freq_scaling.sh