常见问题 - SDK相关
当前 SDK 信息
这是一个基于 Rockchip RV1126B 的 YOLOv5 目标检测流处理项目。
通过查看项目结构和关键文件,可以得出以下信息:
RV1126 / RV1126B-p 注意区分
跳转到 RV1126 SDK | 跳转到 RV1126B-p SDK
📁 RV1126BP SDK Linux V1.1.0
一般情况下选择,当前标准版 SDK
推流功能 已经提供
链接: https://pan.baidu.com/s/1lII38XSRn42JqwvwLTyyAg?pwd=fanc
提取码: fanc
编译方式参考
📋 项目摘要
| 条目 | 内容 |
|---|---|
| 项目类型 | Rockchip RV1126B 平台嵌入式开发 + AI 视觉(YOLOv5) |
| 核心芯片 | RV1126B(Rockchip 的 AIoT SoC,带 NPU) |
| AI 模型 | YOLOv5(目标检测) |
| 操作系统/构建系统 | Buildroot, Debian, Ubuntu, Yocto(多系统支持) |
| 关键文件 | Makefile, build.sh, kernel, rkflash.sh, RV1126B_YOLOV5_STREAM_PLAN.md |
📁 主要目录结构说明
| 目录 | 作用 |
|---|---|
app/ | 应用程序代码(可能包含 YOLOv5 推理、视频流处理等) |
buildroot/ | Buildroot 构建系统配置 |
debian/, ubuntu/, yocto/ | 不同 Linux 发行版的根文件系统 |
device/ | 设备树、板级配置 |
docs/ | 项目文档 |
external/ | 第三方依赖库 |
hal/ | 硬件抽象层(Rockchip HAL) |
kernel-6.1/ | Linux 内核源码(版本 6.1) |
prebuilts/ | 预编译工具链/二进制文件 |
rkbin/ | Rockchip 固件/二进制文件(BL31, DDR init 等) |
rtos/ | 实时操作系统组件(RV1126B 通常有 MCU 核) |
tools/ | 工具脚本 |
u-boot/ | U-Boot 引导加载器 |
🔍 关键文件备注
RV1126B_YOLOV5_STREAM_PLAN.md— 可能是该项目的核心说明/计划文档,建议先查看此文件了解项目目标。build.sh— 主构建脚本。rkflash.sh— 烧录脚本(将固件刷入 RV1126B 板子)。kernel— 可能是指向 kernel-6.1 的软链接。
常用代码位置
RV1126BP SDK Linux V1.1.0
一般情况下选择,当前标准版 SDK
推流功能 已经提供
链接: https://pan.baidu.com/s/1lII38XSRn42JqwvwLTyyAg?pwd=fanc 提取码: fanc
IPC 源码
| 位置 | 作用 |
|---|---|
app/rkipc/src/rv1126b_ipc/ | RV1126B IPC 主程序(main.c、video/、分辨率 ini) |
app/rkipc/common/ | 公共模块(编码、网络、OSD、存储、ISP 等) |
external/ | 底层依赖(camera_engine_rkaiq、mpp 等) |
buildroot/configs/rockchip_rv1126b_ipc_defconfig | IPC 产品 defconfig |
buildroot/board/rockchip/rv1126b/fs-overlay-ipc/ | 启动脚本等 overlay |
怎么改:
- 业务逻辑 →
rv1126b_ipc/+common/ - 分辨率/码流参数 →
rkipc-*.ini - 开机启动 →
fs-overlay-ipc/etc/init.d/S99rkipc→RkLunch-buildroot.sh - 改完在 SDK 根目录:
./build.sh(或单独重编rkipc包)
WEB 前端
| 位置 | 作用 |
|---|---|
app/ipcweb-backend/www-rkipc/ | 前端静态页(Angular 打包产物,.js.gz / .css.gz) |
app/ipcweb-backend/src/ | Web 后端 API(*_api.cpp、rest_api.cpp) |
app/ipcweb-backend/ipcweb-env-*/etc4oem/nginx/ | Nginx 配置 |
设备上部署路径:/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 人形/人脸
- 算法库(闭源,只能调 API)
| 路径 | 内容 |
|---|---|
external/iva/librockiva/rockiva-rv1126b-Linux/include/ | API 头文件 |
rockiva_common.h | 类型定义:ROCKIVA_OBJECT_TYPE_PERSON / FACE |
rockiva_det_api.h | 目标检测 |
rockiva_ba_api.h | 行为分析(区域入侵等) |
rockiva_face_api.h | 人脸识别/比对(rkipc 当前未用) |
external/iva/librockiva/.../lib*.so | 预编译库 |
external/iva/models/rockiva_data_rv1126b/ | 模型(iva_object_detection_*.data) |
- 应用层(可改源码,RV1126B IPC 主要在这)
| 路径 | 作用 |
|---|---|
app/rkipc/common/rockiva/rockiva.c | 初始化、选模型、配置检测类型(人形+人脸) |
app/rkipc/src/rv1126b_ipc/video/video.c | 送帧给 IVA、画人形/人脸框 |
app/rkipc/src/rv1126b_ipc/rkipc-*.ini | [event.regional_invasion] 参数 |
external/samples/example/common/sample_comm_iva.c | 官方示例 |
Web 侧区域入侵配置:app/ipcweb-backend/src/event_api.cpp
- 当前 IPC 怎么用人形/人脸
rkipc 走的是 BA(行为分析)+ 检测,不是单独的人脸识别模块:
rockiva_model_type = big→ROCKIVA_DET_MODEL_CLS8(含人形、人脸、车等)small/medium→ROCKIVA_DET_MODEL_PFP(人形、人脸、宠物)- 规则里同时开启:
initParams.baRules.areaInBreakRule[0].objType =
ROCKIVA_OBJECT_TYPE_BITMASK(ROCKIVA_OBJECT_TYPE_PERSON);
initParams.baRules.areaInBreakRule[0].objType |=
ROCKIVA_OBJECT_TYPE_BITMASK(ROCKIVA_OBJECT_TYPE_FACE);
画框在 video.c:人形一种颜色,人脸另一种颜色。
- 应该怎么改
| 需求 | 改哪里 |
|---|---|
| 开关/灵敏度/检测区域 | rkipc-*.ini 的 [event.regional_invasion] |
| 模型大小(精度/性能) | ini 里 rockiva_model_type(big/small/medium) |
| 只检人形、不检人脸 | rockiva.c 里去掉 ROCKIVA_OBJECT_TYPE_FACE 的 bitmask |
| 改框颜色/样式 | rv1126b_ipc/video/video.c 中 ROCKIVA_OBJECT_TYPE_PERSON/FACE 分支 |
| 改算法阈值/规则逻辑 | rockiva.c 的 sense、minObjSize、alertTime 等 |
| 人脸识别/比对(1:N) | 需自行接 rockiva_face_api.h(ROCKIVA_FACE_Init 等),现有 rkipc 未集成 |
| 改检测模型本身 | 只能换 models/ 下 .data 或向 Rockchip 要新库,无源码 |
改完重编 rkipc、iva 包并刷机。模型安装到设备的 /usr/lib/(与 ini 中 rockiva_model_path 一致)。
两种抗畸变方式
有镜头抗畸变相关代码。
RV1126B-P 走与 RV1126B 同一套软件(rv1126bp_ipc defconfig 的 RK_BUILDROOT_BASE_CFG="rv1126b_ipc"),畸变校正逻辑共用。
| 模式 | 说明 | 硬件/模块 |
|---|---|---|
| LDCH | 横向镜头畸变校正(轻量) | ISP / RKAIQ |
| FEC | 基于标定文件的畸变校正(鱼眼/大畸变镜头) | GDC + 标定 ini |
默认均为 close。
代码位置
应用层(主要改这里)
| 文件 | 作用 |
|---|---|
app/rkipc/common/isp/rv1126b/isp.c | rk_isp_set_distortion_correction()、rk_isp_set_ldch_level()、rk_isp_set_fec_level() |
app/rkipc/src/rv1126b_ipc/video/video.c | FEC 时创建 GDC 通道、加载 fec_ini_file |
app/rkipc/src/rv1126b_ipc/rkipc-*.ini | 配置项 |
app/ipcweb-backend/src/image_api.cpp | Web 设置畸变参数 |
底层算法/驱动
| 路径 | 作用 |
|---|---|
external/camera_engine_rkaiq/rkaiq/include/uAPI2/rk_aiq_uapi1_rv1126b.h | rk_aiq_uapi_setLdchEn、setLdchCorrectLevel、setFecEn 等 |
external/camera_engine_rkaiq/IspFec/fec_calib/*.ini | 镜头标定文件(安装到 /usr/share/fec_calib/) |
external/camera_engine_rkaiq/rkaiq/algos/afec/ | FEC 算法 |
kernel-6.1/drivers/media/platform/rockchip/fec/ | FEC 内核驱动 |
文档
app/rkipc/docs/Rockchip_Developer_Guide_Linux_RKIPC_CN.md(RV1126B IPC 数据流、FEC/LDCH 说明)
用法
1. 改 ini(最直接)
在 app/rkipc/src/rv1126b_ipc/rkipc-xxx-buildroot.ini 的 [isp.0.enhancement]:
distortion_correction = LDCH ; 或 FEC / close
ldch_level = 50 ; 0~100,仅 LDCH 有效
fec_level = 50 ; 0~100,仅 FEC 有效
fec_ini_file = /usr/share/fec_calib/sc450ai_CRK4F4209_ldc.ini ; FEC 必填
已有标定文件示例:
sc450ai_CRK4F4209_ldc.inisc850sl_CMK-OT2115-PC1_ldc.iniimx415_CMK-OT1948-PV1_ldc.inisc200ai_CRK2F3537-V2_ldc.ini
2. Web 页面
图像增强 → sDistortionCorrection(FEC / LDCH / close)+ iLdchLevel / iFecLevel
3. 运行时 API
rk_isp_set_distortion_correction(0, "LDCH"); // 或 "FEC"
rk_isp_set_ldch_level(0, 50);
rk_isp_set_fec_level(0, 50);
注意: 切换 distortion_correction 会触发 rk_video_restart() 重建视频链路。
4. FEC 与 LDCH 数据流差异
- LDCH:VI → VPSS online(开销小)
- FEC:VI → GDC → VPSS offline(需
fec_ini_file,开销更大)
FEC 开启时 video.c 会走 rkipc_vi_gdc_vpss_init()。
换镜头 / RV1126B-P 新板子怎么做
- 小畸变普通镜头 → 用 LDCH,调
ldch_level即可。 - 大畸变/鱼眼 → 用 FEC,需为新镜头生成标定 ini(
external/camera_engine_rkaiq/IspFec/工具链),放到/usr/share/fec_calib/并在 ini 里指定路径。 - 精细系数也可在 RKAIQ IQ JSON 的
ldc段配置(sw_ldcC_lensDistor_coeff等)。
RV1126B-P 板级差异主要在 kernel-6.1/arch/arm64/boot/dts/rockchip/rv1126bp-evb*.dts,与畸变算法本身无关。
系统调试
NPU 负载查看
NPU 频率调整
root@rv1126bp-buildroot:/sys/class/devfreq# cat 21f40000.rkvenc/available_governors
venc_ondemand rknpu_ondemand userspace simple_ondemand
root@rv1126bp-buildroot:/sys/class/devfreq# cat 22000000.npu/available_governors
venc_ondemand rknpu_ondemand userspace simple_ondemand
NPU 对应的 devfreq 节点是 22000000.npu。视频编码器 21f40000.rkvenc 的节点可以忽略。
你列出的可用调频策略(governors)有:
venc_ondemand:视频编码专用(不适合 NPU)rknpu_ondemand:推荐,根据 NPU 负载自动调频userspace:手动固定频率simple_ondemand:通用负载调频
✅ 推荐操作:使用 rknpu_ondemand 自动调频(无需干预)
大部分情况下保持这个策略即可,NPU 会在空闲时自动降频、推理时自动升频:
echo rknpu_ondemand > /sys/class/devfreq/22000000.npu/governor
然后查看当前策略是否生效:
cat /sys/class/devfreq/22000000.npu/governor
🔧 手动固定频率(调试用)
-
查看支持的频率列表:
cat /sys/class/devfreq/22000000.npu/available_frequencies根据 RV1126 规格,常见档位如 300MHz、400MHz、500MHz、600MHz、700MHz、800MHz 等(以实际输出为准)。
-
改为 userspace 模式:
echo userspace > /sys/class/devfreq/22000000.npu/governor -
设置目标频率(例如 600000000 Hz):
echo 600000000 > /sys/class/devfreq/22000000.npu/userspace/set_freq -
确认当前频率:
cat /sys/class/devfreq/22000000.npu/cur_freq
📌 注意事项
- 手动固定频率后,NPU 将不再根据负载自动调节,可能会导致过热或不必要的功耗,建议调试完成后恢复
rknpu_ondemand。 - 如果你的应用是用 RKNN API 跑模型,通常驱动会自动管理频率,无需手动调整。只有需要性能压测或功耗优化时才需干预。
如果你想查看当前实际运行的频率(即使是通过 devfreq 调整后的),依然可以用你之前找到的 debugfs 路径:
cat /sys/kernel/debug/clk/clk_npu_pll/clk_rate
或者直接读取 devfreq 的 cur_freq。