RV1106开发实战:从编译到外设配置的全流程指南

张开发
2026/4/17 18:06:46 15 分钟阅读

分享文章

RV1106开发实战:从编译到外设配置的全流程指南
1. RV1106开发板环境搭建第一次接触RV1106开发板时我被它小巧的体积和强大的性能所吸引。作为一款集成了Cortex-A7处理器和0.5TOPS NPU的视觉处理芯片RV1106非常适合嵌入式视觉应用开发。但在开始开发前我们需要先搭建好开发环境。我推荐使用Ubuntu 20.04作为开发主机系统这是经过验证最稳定的选择。安装完系统后第一件事就是配置交叉编译工具链。RV1106使用的是arm-rockchip830-linux-uclibcgnueabihf工具链这个工具链需要添加到系统PATH中。具体操作是在~/.bashrc文件末尾添加export PATH/opt/rv1106/toolchain/bin:$PATH然后执行source ~/.bashrc使配置生效。接下来需要安装一些必要的开发依赖包sudo apt-get install git make gcc g bison flex libssl-dev libncurses5-devSDK获取是个关键步骤。RV1106的SDK通常包含以下组件Linux内核源码4.19版本Buildroot构建系统多媒体处理框架如Rockchip的Rockit各种外设驱动和示例代码我建议从官方渠道获取最新的SDK包解压后目录结构通常如下sdk/ ├── build.sh # 顶层构建脚本 ├── kernel/ # Linux内核源码 ├── buildroot/ # 根文件系统配置 ├── app/ # 应用程序目录 └── rockit/ # 多媒体处理框架2. 系统编译与烧写编译RV1106系统镜像是个系统工程需要按照正确顺序操作。首先进入SDK根目录执行配置命令./build.sh lunch这会列出所有可用的配置选项选择与你的开发板匹配的配置。完整编译系统镜像使用./build.sh这个命令会依次编译U-Boot、内核和根文件系统整个过程可能需要30-60分钟取决于主机性能。编译完成后生成的镜像文件位于rockdev目录下主要包括MiniLoaderAll.bin一级loaderuboot.imgU-Boot镜像boot.img内核镜像rootfs.img根文件系统烧写镜像到开发板有多种方式使用Rockchip提供的Windows工具AndroidTool在Linux下使用rkdeveloptool通过TF卡启动适合量产烧录我更喜欢使用rkdeveloptool这是官方提供的命令行工具。首先让开发板进入Maskrom模式通常需要短接两个测试点然后执行rkdeveloptool db MiniLoaderAll.bin rkdeveloptool wl 0 rootfs.img rkdeveloptool rd3. 外设驱动配置RV1106的外设资源非常丰富正确配置这些外设是开发的关键。我以常用的几个外设为例说明配置方法。摄像头接口配置 RV1106支持MIPI CSI接口最多可接两个摄像头。设备树配置示例csi2 { status okay; ports { port0 { csi2_out: endpoint { remote-endpoint isp_in; }; }; }; };GPIO使用 RV1106提供了多个GPIO bank在用户空间可以通过sysfs接口控制echo 50 /sys/class/gpio/export # 导出GPIO3_A23*32250 echo out /sys/class/gpio/gpio50/direction echo 1 /sys/class/gpio/gpio50/valueUSB设备模式 将RV1106配置为USB网卡echo peripheral /sys/devices/platform/usb0/dwc3_mode ifconfig usb0 192.168.1.1004. 多媒体开发实战RV1106的强项在于多媒体处理特别是视频编解码和图像处理。Rockchip提供了Rockit框架来简化开发。视频采集示例# 查看摄像头设备 v4l2-ctl --list-devices # 查看支持的格式 v4l2-ctl --list-formats-ext --device/dev/video11图像采集测试rkaiq_3A_server # 启动3A服务 # 采集YUV数据 rk_mpi_vi_test -w 1920 -h 1080 -t 4 -c 0 -d 0 -m 0 -o /tmp/output.yuv # 拍摄JPEG照片 rk_mpi_vi_test -w 1920 -h 1080 -t 4 -c 0 -d 0 -m 1 --codec15 -o /tmp/photo.jpg视频编码测试# 录制H.264视频 rk_mpi_vi_test -w 1920 -h 1080 -t 4 -c 0 -d 0 -m 1 -l 300 --codec8 -o /tmp/video.h264在实际项目中我们通常会使用Rockit的MPI接口进行开发。下面是一个简单的视频采集编码示例代码#include rockit/rk_mpi.h int main() { RK_MPI_SYS_Init(); // 创建VI通道 VI_CHN_ATTR_S vi_attr {0}; vi_attr.u32Width 1920; vi_attr.u32Height 1080; vi_attr.enPixFmt IMAGE_TYPE_NV12; RK_MPI_VI_SetChnAttr(0, vi_attr); RK_MPI_VI_EnableChn(0); // 创建VENC通道 VENC_CHN_ATTR_S venc_attr {0}; venc_attr.stVencAttr.enType RK_VIDEO_ID_AVC; venc_attr.stVencAttr.u32Profile 66; // Baseline RK_MPI_VENC_CreateChn(0, venc_attr); // 绑定VI和VENC MPP_CHN_S src_chn {MOD_ID_VI, 0}; MPP_CHN_S dst_chn {MOD_ID_VENC, 0}; RK_MPI_SYS_Bind(src_chn, dst_chn); // 获取编码数据 VENC_STREAM_S stream; while(1) { RK_MPI_VENC_GetStream(0, stream, -1); // 处理stream... RK_MPI_VENC_ReleaseStream(0, stream); } return 0; }5. 系统优化与调试在RV1106开发过程中系统优化是提升性能的关键。以下是我总结的几个优化技巧内存优化 RV1106内置的DDR3L内存有限通常128MB或256MB可以通过以下方式优化调整CMA大小在设备树中修改reserved-memory节点使用zram压缩交换优化应用内存使用避免频繁分配释放启动优化# 查看启动耗时 systemd-analyze systemd-analyze blame性能监控# 查看CPU负载 mpstat -P ALL 1 # 查看内存使用 free -m # 查看NPU使用率 cat /sys/kernel/debug/rknpu/load调试技巧使用rkdb工具进行内核调试通过串口查看完整启动日志使用gdb远程调试应用程序6. 实际项目经验分享在最近的一个智能门铃项目中我们充分利用了RV1106的多媒体能力。项目需求包括1080P视频采集H.264编码移动侦测人脸检测RTSP流媒体我们使用Rockit框架的TGI接口快速搭建了视频处理pipeline配置如下{ nodes: [ { name: vi, type: vi, config: { width: 1920, height: 1080 } }, { name: venc, type: venc, config: { codec: h264 } }, { name: rtsp, type: rtsp, config: { port: 554, path: live } } ], connections: [ [vi.output, venc.input], [venc.output, rtsp.input] ] }遇到的坑和解决方案视频卡顿问题调整ISP参数降低3A算法复杂度编码延迟大修改VENC的gop大小和bitrate内存不足优化CMA配置减少缓存数量7. 进阶开发技巧对于想要深入开发RV1106的开发者以下内容可能会有所帮助自定义内核模块开发#include linux/module.h static int __init hello_init(void) { printk(KERN_INFO Hello RV1106!\n); return 0; } static void __exit hello_exit(void) { printk(KERN_INFO Goodbye RV1106\n); } module_init(hello_init); module_exit(hello_exit); MODULE_LICENSE(GPL);NPU模型部署 RV1106的NPU支持Caffe/TensorFlow模型部署流程使用rknn-toolkit转换模型量化模型建议使用int8量化部署到设备运行示例代码from rknn.api import RKNN rknn RKNN() rknn.config(target_platformrv1106) rknn.load_tensorflow(modelmodel.pb) rknn.build(do_quantizationTrue, datasetdataset.txt) rknn.export_rknn(model.rknn)低功耗优化合理配置CPU频率调节器不使用的外设及时关闭时钟利用MCU处理简单任务优化电源管理配置8. 常见问题解答在社区和实际项目中我收集了一些常见问题Q: 编译时出现Toolchain not found错误A: 检查工具链路径是否正确确保执行了source ~/.bashrcQ: 摄像头图像偏色A: 检查ISP配置特别是AWB和CCM参数Q: NPU推理结果不正确A: 检查模型量化是否合理尝试不同的量化策略Q: 系统运行一段时间后卡死A: 检查内存使用情况可能是内存泄漏导致Q: 如何提高编码质量A: 调整编码参数echo bitrate4000 /proc/venc/0/ctrl echo gop30 /proc/venc/0/ctrl9. 资源推荐想要深入学习RV1106开发可以参考以下资源官方文档Rockchip_Quick_Start_Linux_IPC_SDK_CN.pdfRV1106 TRM (Technical Reference Manual)Rockchip_Developer_Guide_MPI.pdf开发工具rkdeveloptool: 烧写工具rknn-toolkit: NPU模型转换工具rkdb: 内核调试工具社区资源瑞芯微开发者社区野火电子论坛GitHub上的开源项目在开发过程中保持SDK和文档的更新很重要瑞芯微会定期发布新的SDK版本和补丁。建议至少每季度检查一次更新特别是当遇到硬件相关问题时。

更多文章