一、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
相关推荐
A小辣椒9 小时前
TShark:Wireshark CLI 功能
linux
A小辣椒13 小时前
TShark:基础知识
linux
AlfredZhao15 小时前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao1 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334661 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush42 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5202 天前
Linux 11 动态监控指令top
linux
不会C语言的男孩2 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言