常见问题 - SDK相关
当前 SDK 信息
这是一个基于 Rockchip RV1126/RV1109 的 YOLOv5 目标检测流处理项目。
通过查看项目结构和关键文件,可以得出以下信息:
RV1126 / RV1126B-p 注意区分
跳转到 RV1126 SDK | 跳转到 RV1126B-p SDK
📁 RV1126 SDK 文件下载
链接: https://pan.baidu.com/s/1OSdhBi32C13lBNVC-Sz63w?pwd=fanc
提取码: fanc 复制这段内容后打开百度网盘手机App,操作更方便哦
编译方式参考
📋 项目摘要
| 条目 | 内容 |
|---|---|
| 项目类型 | 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/ | 第三方依赖库(rkmedia、rknpu、camera_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.c、video/、各传感器 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_RV1126 | rv1126_ipc_rkmedia | RKMedia(默认) |
COMPILE_FOR_RV1126_ROCKIT | rv1126_ipc_rockit | Rockit |
COMPILE_FOR_RV1126_BATTERY_IPC | rv1126_battery_ipc | Rockit |
COMPILE_FOR_RV1126_SNAPSHOT | rv1126_snapshot | EasyMedia |
怎么改:
- 业务逻辑 →
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.cc | YOLOv5 推理参考 |
external/rknpu/rknn/rknn_api/examples/rknn_yolov5_demo/src/postprocess.cc | YOLOv5 后处理参考 |
external/rkmedia/examples/rtsp-nn.cfg | RTSP 双码流配置(主码流/子码流) |
external/rkmedia/examples/CMakeLists.txt | RKMedia examples 编译入口 |
怎么改:
- 模型路径/输入尺寸 →
rkmedia_vi_rknn_venc_rtsp_test.c中的g_ssd_path、MODEL_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.cpp、rest_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.h | IVM API 头文件(人形/人脸/车辆检测、区域入侵等类型定义) |
app/rkipc/common/ivm/event.c | IVM 事件处理(当前大部分逻辑已注释,未启用) |
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.c | IVM 初始化、送帧、画框(当前已注释) |
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.c | RockIVA 源码(存在但 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.c中event_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.c 或 rkmedia_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.c | rk_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.cpp | Web 设置畸变参数 |
底层算法/驱动
| 路径 | 作用 |
|---|---|
external/camera_engine_rkaiq/rkisp/ | RKAIQ ISP 算法(rk_aiq_uapi_setLdchEn、setFecEn 等) |
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 页面
图像增强 → sDistortionCorrection(LDCH / 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 算法校正,适合鱼眼/大畸变镜头,开销更大
换镜头 / 新板子怎么做
- 小畸变普通镜头 → 用 LDCH,调
ldch_level即可。 - 大畸变/鱼眼 → 用 FEC,调
fec_level;精细系数可在 RKAIQ IQ JSON 的ldc段配置。 - 板级差异主要在
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
🔧 手动固定频率(调试用)
-
查看支持的频率列表:
cat /sys/class/devfreq/ffbc0000.npu/available_frequenciesRV1126 NPU 常见档位如 200MHz、300MHz、400MHz、500MHz、600MHz 等(以实际输出为准)。
-
改为 userspace 模式:
echo userspace > /sys/class/devfreq/ffbc0000.npu/governor -
设置目标频率(例如 600000000 Hz):
echo 600000000 > /sys/class/devfreq/ffbc0000.npu/userspace/set_freq -
确认当前频率:
cat /sys/class/devfreq/ffbc0000.npu/cur_freq
📌 注意事项
- 手动固定频率后,NPU 将不再根据负载自动调节,可能导致过热或不必要的功耗,建议调试完成后恢复自动调频。
- 如果用 RKNN API 跑模型,通常驱动会自动管理频率,无需手动调整。只有需要性能压测或功耗优化时才需干预。
- SDK 自带 NPU 调频测试脚本:
external/rockchip-test/npu2/npu_freq_scaling.sh