Linux 图形与显示硬件架构总览
目录
1. 引言
在现代计算设备中,流畅而绚丽的图形界面是用户体验的核心。这背后依赖于多个专用硬件模块的精密协作。理解这些硬件的结构与分工,是掌握 Linux 图形与显示驱动开发与性能优化的关键。
以瑞芯微 RK3588 平台为例,其典型的图形与显示硬件子系统主要包含以下几个核心单元:
-
GPU(图形处理器):负责执行复杂的 2D/3D 图形渲染和并行计算任务,是视觉效果的“绘制引擎”。RK3588 平台集成的是 Arm Mali-G610 GPU,Mali-G610 GPU 是一个基于开放标准的图形加速平台,支持二维图形、三维图形以及通用计算(GPGPU)。
-
显示控制器(DC/DPU):显示控制器(Display Controller,也称 Display Processing Unit)不负责创建图像,它的任务是将 GPU 或 VPU 准备好的图像数据(帧缓冲)从内存中取出,并按照正确的时序发送到显示面板上。
-
视频编解码单元(VPU):专门用于高效处理视频数据的硬件,负责视频的压缩(编码)和解压(解码)。
-
专用硬件加速模块:除了强大的 GPU,现代 SoC 中还集成了许多小而精的硬件加速单元,用于处理如图形叠加、缩放、旋转等常见但相对简单的任务。
-
系统总线与 IOMMU:所有硬件单元都通过片上系统总线(SoC Bus,通常是 ARM AMBA AXI 等)连接到共享的数据中枢——系统内存。IOMMU(输入/输出内存管理单元)负责管理和隔离不同硬件对内存的访问,确保系统安全与稳定。
本文将逐一拆解这些硬件模块,并详细描述软件框架和硬件模块之间的对应关系。
2. GPU
GPU 是整个图形栈中最复杂的计算单元,其核心使命是高速执行渲染与计算指令,生成最终的图像。
Mali-G610 作为 Arm 的 Valhall 架构 GPU,内部架构精密,通常包含以下核心模块:
-
命令流前端(Command Stream Frontend,CSF):Mali-G610 的“前门”,负责接收并解析从 CPU 发来的命令流(Command Buffer)。它取代了早期 GPU 的 Job Manager,支持更细粒度的任务调度,从而让 CPU 能够更高效地提交任务。
-
任务调度器(Scheduler):这是一个至关重要的逻辑单元,将解析后的任务(绘制调用、计算任务等)分发给下层 Shader Core。它负责管理任务的执行顺序、上下文切换与资源分配,确保 GPU 的各个执行单元得到充分利用。
-
着色器核心(Shader Core, SC):这是 Mali-G610 的并行计算引擎,也是主要的运算和渲染单元。每个 Shader Core 内部包含:
-
ALU(Arithmetic Logic Unit):执行向量/标量算术逻辑运算,是执行计算任务的基础。
-
LSU(Load/Store Unit):处理内存访问请求,负责将数据从缓存或内存中加载到寄存器,或将结果写回。
-
纹理单元(Texture Unit):专门用于采样和过滤纹理数据,是实现逼真渲染的关键。
-
线程控制逻辑:负责调度和分支控制,管理成千上万个并行线程的执行流程。 多个 Shader Core 可并行执行顶点着色、片段着色和计算着色器,大大提高了吞吐量。
-
-
片上 Tile Buffer / OCM(On-Chip Memory):Mali-G610 使用 TBR(Tile-Based Rendering,基于瓦块的渲染) 架构。Tile Buffer 用于存储局部渲染结果(颜色、深度、模板数据),这减少了对外部内存的带宽需求,从而显著提高了渲染效率并降低功耗。
-
二级缓存(L2 Cache):作为多个 Shader Core 的共享缓存,用于存储中间结果和共享数据。与 Tile Buffer 不同,L2 缓存存储的是通用数据,而不是局部渲染结果,它进一步降低了外部内存访问压力,提升了数据重用率。
-
GPU MMU / Page Table Walker:为 GPU 提供虚拟内存支持,实现 GPU 访问的虚拟地址到物理地址的转换。这使得 GPU 能够像 CPU 一样管理内存,并支持多应用隔离和更安全的任务执行。
-
外部互连接口(Interconnect,AXI/CHI):这个接口是连接 GPU 与 SoC 系统总线的“桥梁”,它负责完成 GPU 和 DRAM 之间的所有数据交互。
-
性能监控单元(Performance Monitor Unit,PMU):PMU 负责收集 GPU 运行时的各种性能计数器,如指令执行数、缓存命中率、带宽占用等。这些数据对于开发者进行调试和优化至关重要。
GPU 硬件模块框图
下图清晰地描绘了 Mali-G610 的内部模块和它们之间的数据流向。
3. 显示控制器
RK3588 内置了非常强大的多通道显示控制器 VOP2,VOP(Video Output Processor,视频输出处理器)模块是一个显示输出处理器。它从系统内存的帧缓冲区读取视频数据和用户界面(UI)数据,执行相应的处理操作,如裁剪、色域空间转换、缩放和叠加,然后通过各个视频端口显示接口高速输出,支持 HDMI/DP/MIPI-DSI 等多种输出接口。
VOP2 中集成了以下多个核心模块:
1. 图层处理单元:处理来自不同源的多个图像图层
-
多层叠加(Overlay / Alpha Blending):VOP 能够同时处理多个图层(例如,一个应用程序窗口、一个视频播放器窗口和一个鼠标光标),将它们叠加在一起。这个过程会考虑每个图层的透明度(Alpha),从而实现半透明效果。
-
图层混合(Blender):负责将多个处理过的图层混合成最终的图像。
2. 图像后处理模块:在图像数据离开 VOP 之前,通常会进行一系列的后处理,以优化显示效果
-
缩放器(Scaler):对图像进行放大或缩小,主要用于将图像图层放大或缩小到显示器的目标分辨率。
-
颜色空间转换器(Color Space Converter, CSC):实现 YUV 与 RGB 等颜色格式转换,主要用于将来自内存的图像数据(通常是 YUV 格式)实时转换为显示器所需要的 RGB 格式。
-
伽马校正(Gamma Correction):调整图像的亮度和对比度,使其在不同显示设备上呈现出更自然的色彩。
-
抖动(Dithering):当需要将高色深的图像(如 10 位)转换为低色深(如 8 位)时,通过增加一些噪点来模拟出更丰富的色彩过渡,减少色带现象。
-
色调、亮度、对比度、饱和度调整(BCSH):提供对图像颜色属性的硬件级调整。
3. 时序控制器(Timing Controller, TCON):生成显示器所需的时钟、行同步、场同步等时序信号
-
时钟生成:生成显示器的像素时钟(Pixel Clock)和同步信号(Horizontal/Vertical Sync)。
-
同步信号:根据显示模式(分辨率、刷新率)生成 Hsync、Vsync 等信号,以确保图像数据在正确的时间点被送出。
RK3588 平台上 KMS 软件框架与硬件模块对应关系
Linux 内核中的 DRM/KMS 框架使用了一系列逻辑对象来抽象显示硬件。理解这些逻辑对象与 RK3588 上的物理 IP 核之间的对应关系,是深入理解整个显示系统架构的关键。
-
Plane(图层):Plane 对应着 RK3588 VOP 中负责图像叠加的硬件叠加单元。VOP 支持从内存的不同位置同时读取多个独立的图像层(如一个 UI 层和两个视频层),然后由硬件自动将它们混合(Alpha Blend)和叠加在一起。这种多层处理能力对于现代操作系统至关重要,它允许在视频播放或游戏等场景下,只更新需要变化的图层,而无需 CPU 重新合成整个画面,从而显著降低了功耗和带宽。
-
CRTC(CRT Controller):CRTC 负责生成精确的显示时序信号,如水平同步(HSync)和垂直同步(VSync),以确保图像在屏幕上稳定显示。在 RK3588 平台上,CRTC 的功能完全集成在自研的 VOP2 模块中。RK3588 包含多个 VOP2 实例(如 VOP0、VOP1、VOP2、VOP3),每个 VOP2 都可以作为一个独立的 CRTC 实例,能够独立地驱动一个显示屏,这也是 RK3588 支持多屏异显的核心所在。
-
Encoder(编码器):Encoder 的作用是将 VOP2 生成的通用像素数据流,转换为特定显示接口协议所需的串行信号。这些编码器是 SoC 内部的硬件 IP 核,通常与 PHY 紧密协作。
-
HDMI Encoder:RK3588 集成了符合 HDMI 2.1 规范的编码器 IP,它通常是来自 Synopsys DesignWare 或 Cadence 等公司的 IP 核,负责将像素数据打包成 TMDS 信号。
-
DisplayPort(DP) Encoder:RK3588 内置了符合 DP 1.4a 规范的编码器 IP,这通常是来自 Analogix 或 Synopsys DesignWare 等公司的 IP 核,负责将像素数据打包成 DisplayPort 协议数据流。
-
MIPI DSI Encoder:负责将像素数据编码为 MIPI DSI 协议,这通常是来自 Synopsys DesignWare 或 Cadence 等公司的 IP 核,用于驱动手机、平板等内置屏幕。
-
-
Connector(连接器):Connector 在 KMS 中代表一个物理输出接口(如 HDMI 端口),它直接关联着 PHY(Physical Layer) 硬件模块。PHY 是真正负责以正确的电气标准来驱动高速信号的模拟电路部分,它将编码器输出的数字信号转换为能在物理线缆上传输的高速电信号,并保证信号的完整性。RK3588 拥有多个独立的 PHY 模块,例如 HDMI PHY、DP PHY 和 MIPI DSI PHY。
-
Bridge(桥接器):Bridge 是一个可选的硬件模块,当 SoC 的原生显示输出接口与屏幕的输入接口不匹配时,就需要它来进行协议转换。
-
DP to HDMI Bridge:例如在一些没有 HDMI 输出的 PC 或设备上,可以使用桥接芯片(如 Parade PS176)将 DP 信号转换为 HDMI 信号。
-
MIPI DSI to LVDS/eDP Bridge:在一些笔记本或工业平板中,SoC 的 MIPI DSI 信号需要通过桥接芯片(如 Parade PS8642)转换为面板更常用的 eDP 或 LVDS 信号。
-
硬件模块框图
下图直观地展示了 RK3588 平台上的硬件模块与 KMS 框架对应关系和数据流向。
4. VPU
VPU(Video Processing Unit) 是专为视频数据处理而设计的硬件协处理器。在没有 VPU 的情况下,视频解压缩和压缩任务会给 CPU 带来沉重负担,导致系统性能下降和高功耗。
RK3588 集成了瑞芯微自研的 VPU3.0 视频编解码单元,包含视频解码单元(VDEC)和视频编码单元(VENC)两个主要部分,由一系列处理核心组成:
-
硬件解码器(VDEC):VPU 支持高达 8K@60fps 的主流视频格式硬件加速解码,其解码核心包括:
-
VDPU381:负责 H.265(HEVC)、VP9 等高效格式解码。
-
AV1 解码器:专门处理新一代 AV1 格式解码。
-
VDPU720:负责 H.264 和其他老式格式解码。
-
VDPU121:负责 JPEG 格式解码。
-
-
硬件编码器(VENC):VPU 提供强大的实时编码能力,用于录屏、视频会议、安防监控等场景。
-
VEPU580:负责 H.265 和 H.264 格式的编码,支持高达 8K@30fps 的分辨率。
-
VEPU121:负责 JPEG 格式编码。
-
-
Zero-Copy 播放:这是 RK3588 VPU 的一个核心优势。VPU 解码后的视频帧可以直接存放在一个特殊的内存区域,这个内存区域与显示控制器(VOP)共享。显示控制器能够直接从该区域读取数据进行显示,全程无需 CPU 或 GPU 进行任何数据拷贝,实现了最高的播放效率和最低的功耗。
VPU 硬件模块框图
下图清晰地展示了 RK3588 VPU 的内部模块和它与系统内存的数据交互。
5. 专用硬件加速模块
RK3588 中集成了 RGA3(Raster Graphic Acceleration 3) 2D 加速引擎,用于加速 2D 图形基本操作,包括图像位置变换(旋转、镜像)、尺寸变换(缩小、放大)、格式转换、FBC 编码和解码、TILE 编码和解码以及窗口重叠等。
RGA 是一个高效的 2D 图形硬件加速单元,可以看作是 Blitter 引擎 和 2D 引擎 的结合体。它能独立于 CPU 和 GPU,在后台高效完成以下操作,极大减轻了 CPU 和 GPU 的负载:
-
图像的复制(Bitblit):快速将一个矩形区域的像素从一个内存位置复制到另一个位置。
-
尺寸变换(Scaling):高效地进行图像放大或缩小。
-
位置变换:包括图像的旋转、镜像等操作。
-
颜色空间转换(CSC):将图像数据从一种颜色格式(如 YUV)实时转换为另一种(如 RGB)。
-
Alpha 混合(Alpha Blending):将多个图层(例如摄像头预览、用户界面)叠加到一起,并处理透明度。
-
内存压缩与解压缩:支持 FBC(Frame Buffer Compression) 编码和解码,用于节省带宽和功耗。
在 Linux 软件栈中,RGA 通常通过独立的驱动程序(如 rockchip_rga)暴露给上层应用。它常用于摄像头预览数据处理、UI 合成优化、视频后处理等场景,是实现低功耗、高效率图形渲染的关键。
RGA 硬件模块框图
下图清晰地展示了 RGA 在整个系统中的数据流向和位置。
6. 典型硬件拓扑连接
将以上所有模块组合起来,就构成了一个典型的 SoC 图形与显示子系统。这些模块通常通过高性能的片上系统总线(SoC Bus, 如 ARM 的 AXI 总线)相互连接,并由 IOMMU 统一管理内存访问,保证数据传输的效率与安全。
7. 软件到硬件的完整交互链路
最后,我们将软件栈与硬件架构结合起来,观察一个图形渲染请求从应用程序到屏幕显示的完整生命周期。
整个流程自上而下穿越用户态、内核态,最终到达物理硬件:
-
用户态:应用程序(如游戏、浏览器)通过 OpenGL/Vulkan 等图形 API 发出绘图指令。这些指令被 Mesa 3D(Linux 图形库)捕获并翻译成特定于 GPU 的命令。同时,Wayland/X11 等显示服务负责窗口管理和合成。
-
内核态:Mesa 将打包好的指令通过 DRM(Direct Rendering Manager)核心驱动提交给内核。DRM 是连接用户态和内核驱动的桥梁。它内部的 KMS(Kernel Mode Setting)模块管理显示模式和屏幕设置,而具体的 GPU/VPU 驱动则负责与硬件直接通信。
-
硬件:GPU 驱动将指令写入 GPU 的命令处理器,GPU 开始渲染。渲染完成后,KMS 显示驱动会配置显示控制器(DC)内的 CRTC 模块生成正确的显示时序,并通过 Encoder(例如 Analogix HDMI 编码器 IP)将帧缓冲区的图像数据转换为相应的接口信号,最后经由 PHY 电路驱动物理连接器(Connector),在屏幕上点亮像素。
8. 总结
通过本文的分析,我们构建了一幅更清晰、更具体的 Linux 图形与显示硬件架构图景。它不是由单一芯片完成所有工作,而是一个高度专业化、分工明确的协作体系:
-
GPU(如 RK3588 中的 Arm Mali-G610)作为核心,提供强大的渲染与计算能力。
-
显示控制器(如 RK3588 的显示子系统)忠实地将渲染成果呈现到屏幕上,并通过多图层叠加等技术优化能效。其输出的数字信号流需要经过 Encoder,PHY 甚至 Bridge 芯片的处理,才能驱动最终的物理显示面板。
-
VPU(如 RK3588 的 8K 解码单元)和 2D/Blitter 引擎(如 RGA)等专用单元则作为高效的“协处理器”,分担了视频、2D 等常见任务的负载,让 CPU 和 GPU 可以专注于更复杂的计算。
所有这些硬件单元通过 AXI 等系统总线 高效互联,在 DRM 内核驱动框架的统一调度下,共同响应从应用程序发起的图形请求。理解这一整条软硬件链路,是进行图形与显示系统开发、调试和性能优化的坚实基础。
更多推荐


所有评论(0)