一、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
相关推荐
chlk12310 小时前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑10 小时前
Ubuntu系统安装CodeX出现问题
linux·后端
改一下配置文件11 小时前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
深紫色的三北六号20 小时前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash1 天前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
哈基咪怎么可能是AI1 天前
为什么我就想要「线性历史 + Signed Commits」GitHub 却把我当猴耍 🤬🎙️
linux·github
十日十行2 天前
Linux和window共享文件夹
linux
木心月转码ing2 天前
WSL+Cpp开发环境配置
linux
崔小汤呀3 天前
最全的docker安装笔记,包含CentOS和Ubuntu
linux·后端
何中应3 天前
vi编辑器使用
linux·后端·操作系统