一、linux系统 应用开发:基本认知概念

1、UI开发基本认知概念

1.1、基本概念

以瑞芯微 RK3566 硬件 Linux 环境为例:

css 复制代码
        ┌──────────┐
        │   VPU    │  ← 视频"解"
        └────┬─────┘
             │ 原始帧(YUV/RGB)
        ┌────▼─────┐
        │   RGA    │  ← 图像"搬 / 变"
        └────┬─────┘
             │ 处理后帧
        ┌────▼─────┐
        │   GPU    │  ← UI"画 / 算"
        └────┬─────┘
             │ framebuffer
        ┌────▼─────┐
        │   DRM    │  ← "合成 + 显示"
        └────┬─────┘
             │
           LCD / HDMI

RK3566 上,GPU / VPU / RGA / DRM 是 硬件完全独立、职责严格分离 的四个模块:

  • VPU 负责"解"
  • RGA 负责"搬 / 变"
  • GPU 负责"画"
  • DRM 负责"合 / 显"

它们通过共享内存形成 流水线协同工作,而不是互相替代。

一句话记忆:
VPU 解视频
RGA 搬/缩/转
GPUUI
DRM 显示合成

1.1.1、GPU(图形处理单元)------"画画的人"
1.1.1.1、GPU的本质定位

GPU = 图形渲染引擎

它的目标不是"处理数据",而是:

  • 把 几何 / 像素 / shader 算成最终画面
  • UI、动画、3D 提供算力

GPU负责什么?

  • Qt / QtQuick / OpenGL ES
  • UI 控件绘制
  • 动画、透明度、特效
  • OpenGL shader
  • Wayland / EGL 渲染

GPU不负责什么?

  • ❌ 视频解码
  • ❌ 大规模 memcpy
  • ❌ 视频缩放(效率不如 RGA
1.1.1.2、 GPU 的软件栈
css 复制代码
Qt / OpenGL / Wayland
        ↓
EGL / GLES
        ↓
Mali GPU Driver
        ↓
GPU Hardware

典型特征

bash 复制代码
/dev/mali0
libEGL.so
libGLESv2.so
1.1.1.3、GPU 的工程角色总结

GPU 决定的是:画面"好不好看、顺不顺"

UI 卡 → 第一时间怀疑 GPU

动画掉帧 → GPU / 合成方式
Qt 性能差 → GPU DRM fallback

1.1.2、VPU(视频处理单元)------"解片的人"
1.1.2.1、VPU 的本质定位

VPU = 专用视频编解码硬件

它的存在目的只有一个:

用最小的 CPU 代价,把压缩视频变成原始帧

VPU 负责什么?

  • H.264 / H.265 / VP9 解码
  • JPEG 解码
  • 视频编码(部分规格)
  • 高分辨率视频硬解

VPU 不画、不显示、不合成

1.1.2.1、VPU 的软件栈
css 复制代码
GStreamer / FFmpeg
        ↓
MPP / V4L2
        ↓
VPU Driver
        ↓
VPU Hardware

关键词:

bash 复制代码
mppvideodec
librockchip_mpp.so
/dev/mpp_service
1.1.2.2、工程角色总结

VPU 决定的是:视频"能不能流畅播、CPU 会不会爆"

CPU 播视频 80% → 一定没用 VPU
4K 播不了 → 看 VPU 能力

视频卡顿 → 先确认是否硬解

1.1.3、RGA(Raster Graphic Accelerator)------"搬砖的人"
1.1.3.1、RGA的本质定位

RGA = 高速 2D 图像处理器

它不"画",不"理解 UI",只做一件事:

又快又省地处理"整张图"

RGA擅长什么?

  • memcpy(超快)
  • resize(视频缩放)
  • rotate / flip
  • crop
  • YUV RGB 转换

不支持:

  • 字体
  • UI 控件
  • shader
  • OpenGL
1.1.3.2、RGA的软件栈
css 复制代码
App / MPP / Camera
        ↓
librga
        ↓
RGA Driver
        ↓
RGA Hardware

设备特征:

bash 复制代码
/dev/rga
librga.so
1.1.3.3、RGA工程角色总结

RGA 决定的是:数据"搬得快不快、转得省不省 CPU"

大量拷贝 → RGA

视频缩放 → RGA

旋转摄像头画面 → RGA

1.1.4、DRM(显示子系统)------"最后把画面送上屏的人"
1.1.4.1、DRM的本质定位

DRM = 显示控制 + 硬件合成

它不是"算力模块",而是:

  • 硬件扫描输出
  • 硬件 plane 合成
  • Z-order / alpha

DRM负责什么?

  • plane overlay
  • alpha 混合
  • 硬件合成
  • 双屏 / 异显
  • 最终输出到 LCD / HDMI

DRM 不解码、不画 UI、不做复杂运算

1.1.4.2、DRM的软件栈
css 复制代码
Qt / Wayland / KMS
        ↓
libdrm
        ↓
DRM Driver (VOP2)
        ↓
Display Hardware

会用到的工具:

bash 复制代码
modetest
kmscube
1.1.4.3、DRM工程角色总结

DRM 决定的是:画面"怎么叠、怎么出屏、效率高不高"

多层视频 → DRM plane
UI + 视频 → DRM overlay

双屏异显 → DRM

1.1.5、四者的"关系本质总结表"
模块 本质 是否算力密集 是否独立硬件
GPU 图形渲染 Y
VPU 视频解码 专用 Y
RGA 图像处理 Y
DRM 显示合成 Y

硬件完全独立,但共享 DDR 带宽

1.1.6、真实项目中的典型组合
  1. 场景 1:Qt UI + 视频背景

    nginx 复制代码
    VPU 解视频
    GPU 画 UI
    DRM 合成
  2. 场景 2:双路视频叠加

    nginx 复制代码
    VPU × 2
    DRM plane × 2
  3. 场景 3:摄像头 + UI

    nginx 复制代码
    ISP → RGA → GPU → DRM
相关推荐
2401_8920709821 小时前
【Linux C++ 日志系统实战】LogFile 日志文件管理核心:滚动策略、线程安全与方法全解析
linux·c++·日志系统·日志滚动
lwx91485221 小时前
Linux-Shell算术运算
linux·运维·服务器
somi721 小时前
ARM-驱动-02-Linux 内核开发环境搭建与编译
linux·运维·arm开发
双份浓缩馥芮白21 小时前
【Docker】Linux 迁移 docker 目录(软链接)
linux·docker
黄昏晓x1 天前
Linux ---- UDP和TCP
linux·tcp/ip·udp
路溪非溪1 天前
Linux驱动开发中的常用接口总结(一)
linux·运维·驱动开发
此刻觐神1 天前
IMX6ULL开发板学习-01(Linux文件目录和目录相关命令)
linux·服务器·学习
2401_892070981 天前
【Linux C++ 日志系统实战】高性能文件写入 AppendFile 核心方法解析
linux·c++·日志系统·文件写对象
航Hang*1 天前
第3章:Linux系统安全管理——第2节:部署代理服务
linux·运维·服务器·开发语言·笔记·系统安全
-ONLY-¥1 天前
PostgreSQL运维全攻略:从基础操作到远程配置
linux