一、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
相关推荐
赵民勇2 小时前
yum命令用法与技巧总结
linux·centos
小小福仔2 小时前
Linux运维基础篇(二)之用户管理
linux·运维·服务器·增删改查
灵哎惹,凌沃敏2 小时前
一句话总结IIC协议
arm开发·单片机·开源协议
haluhalu.3 小时前
[特殊字符] 深入理解Linux信号机制:信号的产生,保存和捕捉
linux·运维·服务器
JY.yuyu3 小时前
Linux磁盘管理 / 硬盘分区、创建逻辑卷
linux·运维·服务器
~黄夫人~4 小时前
Kubernetes Pod 初始化容器(InitContainer)起不来的排错思路
linux·运维·服务器
运维有小邓@4 小时前
如何在 Linux 中查看系统日志消息
linux·运维·服务器
天边一坨浮云4 小时前
Ubuntu(PC)遇到的各种问题-EXT4-fs(vdb): VFS: Can‘t find ext4 filesystem
linux·ubuntu
大母猴啃编程5 小时前
线程概念与控制
linux