技术笔记 | RK3588平台RGA驱动与API版本升级指南

前言:

在 Rockchip RK35xx等平台开发中,RGA(2D 图形加速单元)对图像编解码、图形渲染等核心功能的效率与稳定至关重要。随着官方持续优化,适时更新RGA驱动与API版本,能带来更好的性能、更丰富的功能支持以及更稳定的运行表现。

本文将以 RK3588 为例,详细介绍如何从驱动到应用层全面升级RGA版本,并提供实测验证方法,干货满满,建议收藏备用~

一、开发环境准备

在开始更新操作前,需确保开发环境一致,避免因环境不兼容导致更新失败:

•系统版本:Ubuntu 20.04(主机端 + 板卡端)

•内核版本:5.10

•工具依赖:交叉编译器(如 gcc-arm-8.2-2018.08-x86_64-aarch64-linux-gnu)、cmake、git 等

升级目标:

获取最新版本的 RGA 驱动与 API 库,替换旧版本,完成编译与部署。

二、实操步骤

2.1****获取最新驱动源码

RK35xx 系列的RGA驱动源码已开源在 GitHub,从 git下载 RGA 的最新驱动:

复制代码
https://github.com/airockchip/librga

下载后,将驱动文件替换至 SDK 中的对应目录:

复制代码
kernel/drivers/video/rockchip/rga3/

2.2****内核配置检查

若尚未开启 RGA3 支持,请在内核配置中确认以下选项已启用:

cs 复制代码
CONFIG_VIDEO_ROCKCHIP_RGA=y
# CONFIG_ROCKCHIP_RGA is not set 
CONFIG_ROCKCHIP_MULTI_RGA=y
CONFIG_ROCKCHIP_RGA_ASYNC=y
# CONFIG_ROCKCHIP_RGA_PROC_FS is not set 
CONFIG_ROCKCHIP_RGA_DEBUG_FS=y
CONFIG_ROCKCHIP_RGA_DEBUGGER=y

2.3****重新验证

执行内核编译命令,更新后可在板卡上执行以下命令确认版本,若输出显示为新下载的驱动版本号,则说明驱动更新成功。

cs 复制代码
cat /sys/kernel/debug/rkrga/driver_version
RGA multicore Device Driver: v1.2.23

三、RGA API 库更新部署

API 库是开发者调用 RGA 功能的接口,需与驱动版本兼容,否则会出现调用失败。更新流程如下:

3.1****获取最新 librga 源码

同样从 GitHub 下载最新版本:

复制代码
https://github.com/airockchip/librga

3.2****检查版本兼容性

在下载的 librga 源码根目录中,查看README.md文件,确认该版本 API 库支持的驱动版本范围,确认 API 库与当前内核驱动版本兼容。

3.3 编译 librga.so

进入 librga 源码的toolchains目录,编辑toolchain_linux.cmake文件,修改工具链名称和路径(根据实际安装的交叉编译器调整):

cs 复制代码
SET(TOOLCHAIN_NAME "aarch64-linux-gnu")
SET(TOOLCHAIN_HOME "/home/twdz/3588/gcc-arm-8.2-2018.08-x86_64-aarch64-linux-gnu")

# this is required
#SET(CMAKE_SYSTEM_NAME Linux)

# specify the cross compiler
SET(CMAKE_C_COMPILER ${TOOLCHAIN_HOME}/bin/${TOOLCHAIN_NAME}-gcc)
SET(CMAKE_CXX_COMPILER ${TOOLCHAIN_HOME}/bin/${TOOLCHAIN_NAME}-g++)

# where is the target environment
SET(CMAKE_FIND_ROOT_PATH  ${TOOLCHAIN_HOME})

# search for programs in the build host directories (not necessary) 
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# for libraries and headers in the target directories 
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

3.4****编译与部署

在 librga 源码根目录执行编译脚本:

复制代码
./cmake-linux.sh

编译完成后,在 build/build_linux/install 目录下获取生成的文件:

将 lib/ 中的库文件复制到板卡 /usr/lib/aarch64-linux-gnu/

将 bin/rgaImDemo 复制到板卡 /bin/

3.5****验证 API 版本

在板卡上运行,确认 API 版本已更新:

复制代码
rgaImDemo --querystring

输出中可查看 RGA_api version 和功能支持列表,确认更新成功。

cs 复制代码
root@talowe :~# rgaImDemo --querystring Start selecting mode 0
im2d querystring ..
RGA demo mode = 0x0


RGA vendor             : Rockchip Electronics Co.,Ltd.
RGA_api version       : v1.10.3_ [1]
RGA version           : RGA_2_Enhance RGA_3
Max input              : 8192x8192
Max output             : 8128x8128
Byte stride           : 16 byte
Scale limit           : 0.0625 ~ 16
Input support format  : RGBA/ARGB_8888 RGB_888 RGB_565 ARGB_4444 ARGB_5551 YUV420_sp_8bit YUV420_sp_10bit YUV420_p_8bit YUV420_p_10bit YUV422_sp_8bit YUV422_sp_10bit YUV422_p_8bit YUV422_p_10bit YUYV422 YUV400
output support format : RGBA/ARGB_8888 RGB_888 RGB_565 ARGB_4444 ARGB_5551 RGBA_4444 RGBA_5551 YUV420_sp_8bit YUV420_sp_10bit YUV420_p_8bit YUV422_sp_8bit YUV422_sp_10bit YUV422_p_8bit YUYV420 YUYV422 YUV400 Y4
RGA feature           : color_fill color_palette ROP quantize src1_r2y_csc
dst_full_csc FBC_mode blend_in_YUV BT.2020 expected performance  : max 4 pixel/cycle
复制代码

四、功能测试

通过rgaImDemo工具进行图像拷贝测试,验证 RGA 功能正常:

复制代码
rgaImDemo -w6 --copy

该命令会执行 6 次拷贝操作,并输出每次耗时,可用于验证驱动与库是否正常工作。若输出类似 "copying .... cost time XXX us" 的日志,且最终提示 "write ok",则说明 RGA 功能可正常使用,更新流程全部完成。

cs 复制代码
root@talowe :~# rgaImDemo -w6 --copy
 Start selecting mode 0
im2d while .. 6 time.
Start selecting mode 80
im2d copy ..
RGA demo mode = 0x81
alloc buffer from "/dev/dma_heap/system-uncached-dma32". Could not open /data/in0w1280-h720-rgba8888.bin
can not open file for src channel, memset to 0x11.
This is 1 time in the loop
copying .... cost time 675 us This is 2 time in the loop
copying .... cost time 722 us This is 3 time in the loop
copying .... cost time 762 us This is 4 time in the loop
copying .... cost time 758 us This is 5 time in the loop
copying .... cost time 720 us This is 6 time in the loop
copying .... cost time 724 us
open /data/out0w1280-h720-rgba8888.bin and write ok

五、总结

1.版本兼容:务必确认驱动与 API 版本匹配,避免接口不一致导致异常。

2.环境一致:编译工具链与目标系统架构需对应(如 aarch64),编译过程中若出现 "工具链未找到""头文件缺失" 等报错,优先检查交叉编译器路径配置和依赖库安装;

3.备份原文件:建议在更新前备份原驱动、API 库和内核镜像,若更新失败可快速回滚到稳定版本。替换驱动文件时,需确保覆盖所有相关文件,避免部分旧文件残留导致功能异常;

4.实测验证:更新后务必进行实际图像处理测试,确保功能与性能符合预期。

通过以上步骤,相信你应该能顺利完成 RK3588 平台RGA驱动与API的版本升级。更新后不仅可获得官方的性能优化与bug修复,还能支持更多图像格式与处理特性。

Tips📢:温馨提示

本文所述操作基于特定内核与系统环境,实际执行时请根据自身 SDK 版本与硬件平台适当调整。如有疑问,欢迎在留言交流或与我们联系获得技术支持。

广州眺望电子科技有限公司专注于嵌入式处理器模组的研发与应用,提供从硬件设计到驱动开发,系统解决方案的全流程技术支持。欢迎关注我们,获取更多嵌入式项目开发实战经验!

相关推荐
workflower1 小时前
软件需求变更
嵌入式硬件·压力测试·团队开发·需求分析·规格说明书
Miuney_MAX10 小时前
【单片机】之HC32F460中断向量选择
单片机·嵌入式硬件
XINVRY-FPGA13 小时前
XC3S1000-4FGG320I Xilinx AMD Spartan-3 SRAM-based FPGA
嵌入式硬件·机器学习·计算机视觉·fpga开发·硬件工程·dsp开发·fpga
猫猫的小茶馆15 小时前
【ARM】ARM的介绍
c语言·开发语言·arm开发·stm32·单片机·嵌入式硬件·物联网
猫猫的小茶馆15 小时前
【PCB工艺】数模电及射频电路基础
驱动开发·stm32·单片机·嵌入式硬件·mcu·物联网·pcb工艺
点灯小铭15 小时前
基于单片机的智能药物盒设计与实现
数据库·单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
梓德原16 小时前
【基础】详细分析带隙型稳压电路的工作原理
单片机·嵌入式硬件·物联网
国科安芯17 小时前
航天医疗领域AS32S601芯片的性能分析与适配性探讨
大数据·网络·人工智能·单片机·嵌入式硬件·fpga开发·性能优化
小李做物联网17 小时前
【物联网毕业设计】60.1基于单片机物联网嵌入式项目程序开发之图像厨房监测系统
stm32·单片机·嵌入式硬件·物联网