一、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
相关推荐
开开心心就好6 分钟前
发票合并打印工具,多页布局设置实时预览
linux·运维·服务器·windows·pdf·harmonyos·1024程序员节
予枫的编程笔记38 分钟前
【Linux进阶篇】从基础到实战:grep高亮、sed流编辑、awk分析,全场景覆盖
linux·sed·grep·awk·shell编程·文本处理三剑客·管道命令
Sheep Shaun38 分钟前
揭开Linux的隐藏约定:你的第一个文件描述符为什么是3?
linux·服务器·ubuntu·文件系统·缓冲区
Tfly__1 小时前
在PX4 gazebo仿真中加入Mid360(最新)
linux·人工智能·自动驾驶·ros·无人机·px4·mid360
陈桴浮海1 小时前
【Linux&Ansible】学习笔记合集二
linux·学习·ansible
生活很暖很治愈1 小时前
Linux——环境变量PATH
linux·ubuntu
?re?ta?rd?ed?1 小时前
linux中的调度策略
linux·运维·服务器
深圳市九鼎创展科技1 小时前
瑞芯微 RK3399 开发板 X3399 评测:高性能 ARM 平台的多面手
linux·arm开发·人工智能·单片机·嵌入式硬件·边缘计算
hweiyu001 小时前
Linux 命令:tr
linux·运维·服务器
Trouvaille ~1 小时前
【Linux】应用层协议设计实战(一):自定义协议与网络计算器
linux·运维·服务器·网络·c++·http·应用层协议