从零构建嵌入式视觉系统:RK3588S与Rockit框架的深度适配与调试实战
在嵌入式视觉系统的开发过程中,将Camera采集的图像数据通过HDMI稳定输出是一个常见但极具挑战性的任务。RK3588S作为一款高性能的嵌入式处理器,结合Rockit多媒体框架,为开发者提供了强大的硬件加速和软件支持。然而,在实际工程中,我们往往会遇到官方Demo无法直接运行、代码存在缺陷、依赖库冲突等问题。本文将基于真实项目经验,深入探讨如何在RK3588S平台上基于Rockit框架构建从Camera到HDMI的完整显示流水线,并解决其中遇到的各种技术难题。
1. 环境准备与基础配置
在开始适配之前,我们需要确保开发环境正确搭建。RK3588S平台支持多种操作系统环境,其中Buildroot和Debian是最常见的两种选择。Buildroot系统通常已经集成了Rockit框架所需的所有依赖库,而Debian系统则需要手动移植这些库文件。
对于Buildroot系统,编译完成后会在output目录下生成完整的根文件系统镜像。我们可以通过以下命令查看编译输出:
ls output/rockchip_rk3588/images/
该目录下包含各种格式的根文件系统镜像,如rootfs.ext2、rootfs.squashfs、rootfs.tar等。选择适合的镜像烧写到设备中即可。
对于Debian系统,我们需要从Buildroot的根文件系统中提取Rockit所需的依赖库,包括但不限于:
- libgraphic_lsf.so
- librkAlgoDis.so
- libRkSwCac.so
- librockit.so
这些库文件需要复制到Debian系统的/usr/lib目录下。此外,还需要注意mali库的版本兼容性问题,否则可能导致屏幕显示异常。
注意:在不同系统环境间移植库文件时,务必确保架构一致(均为aarch64),并注意库文件依赖关系。
2. Rockit框架源码分析与Demo编译
Rockit框架的MPI接口示例代码通常位于SDK的external/rockit/mpi/example/mod/目录下。我们需要重点关注test_mpi_vi.cpp文件,这是Camera采集和显示的核心示例。
首先需要编辑CMakeLists文件,确保Demo的编译选项已打开:
set(RK_MPI_TEST_VI_SRC test_mpi_vi.cpp)
add_executable(rk_mpi_vi_test ${RK_MPI_TEST_VI_SRC} ${RK_MPI_TEST_COMMON_SRC})
target_link_libraries(rk_mpi_vi_test ${ROCKIT_DEP_COMMON_LIBS})
install(TARGETS rk_mpi_vi_test RUNTIME DESTINATION "bin")
在实际编译过程中,我们发现官方Demo存在多处问题需要修复。以下是主要的修改点:
修改记录1:注释掉有问题的fread调用
// 注释以下问题代码
// fread(RK_MPI_MB_Handle2VirAddr(srcBlk), 1, stMbPicCalResult.u32MBSize, fp);
修改记录2:移除有问题的函数绑定
// 注释掉有问题的VI-VDEC-VO绑定循环函数
// static RK_S32 test_vi_bind_vdec_bind_vo_loop(TEST_VI_CTX_S *ctx)
修改记录3:修正VO创建函数的执行顺序
这是最关键的一处修改,官方源码中的VO初始化顺序存在问题,正确的执行顺序应该是:
- 获取VO公共属性(RK_MPI_VO_GetPubAttr)
- 定义PubAttr参数
- 设置VO公共属性(RK_MPI_VO_SetPubAttr)
- 使能VO设备(R


659

被折叠的 条评论
为什么被折叠?



