Linux瑞芯微平台显示驱动开发实战 - 第1节

1.1 显示子系统整体架构

在 Linux 系统中,显示子系统负责将应用程序的图形输出最终呈现到显示设备上。其整体架构采用分层设计,从上至下依次为:用户空间图形栈、内核空间 DRM 核心层、硬件驱动层以及物理显示硬件。这种分层结构实现了图形应用与底层硬件的解耦,使得同一套用户空间接口可以适配不同的显示硬件平台。

架构核心目标:提供统一的显示缓冲区管理、模式设置、页面翻转和合成输出机制,屏蔽不同 SoC 显示控制器的硬件差异。
Linux 显示子系统整体分层架构 Linux 显示子系统整体分层架构 用户空间 (Userspace) Wayland / X11 / 直接 DRM 应用 (libdrm, Mesa3D) 内核空间 (Kernel Space) DRM Core (drm.ko) / KMS / GEM / FBDev 兼容层 硬件驱动层 (Driver Layer) Rockchip DRM 驱动 (rockchip-drm.ko) / VOP / MIPI DSI / eDP / HDMI 物理硬件 (Hardware) VOP (Video Output Processor) / 显示控制器 / 接口 PHY / 面板 说明:用户空间通过 /dev/dri/card0 节点与内核 DRM 交互,驱动层直接操作 VOP 寄存器实现显示输出。

从上图可以看出,显示子系统的核心在于 DRM (Direct Rendering Manager) 框架,它作为内核空间的标准显示驱动框架,向上提供系统调用接口,向下定义硬件驱动需要实现的回调函数。

1.2 DRM 框架简介

DRM 框架是 Linux 内核中用于管理显示输出和图形加速的标准框架。它主要由以下核心组件构成:

  • KMS (Kernel Mode Setting):负责显示模式设置、分辨率切换、平面 (Plane) 管理、CRTC 和连接器 (Connector) 管理。
  • GEM (Graphics Execution Manager):负责显存分配、管理、共享和同步,提供 dma-buf 机制用于跨设备共享内存。
  • FBDev 兼容层:提供对传统 framebuffer 设备的兼容支持,方便旧应用迁移。

1.2.1 DRM 核心对象模型

DRM 框架使用面向对象的方式抽象显示硬件,核心对象包括:

对象 内核结构体 功能描述
DRM 设备 struct drm_device 代表一个 DRM 驱动实例,管理所有子对象。
CRTC struct drm_crtc 代表显示控制器,负责扫描输出和时序生成。
Plane struct drm_plane 代表硬件图层,支持叠加合成,每个 CRTC 可绑定多个 Plane。
Encoder struct drm_encoder 代表编码器,将 CRTC 输出的像素数据编码为接口信号 (如 LVDS, MIPI DSI)。
Connector struct drm_connector 代表物理连接器 (HDMI, eDP, DSI 接口),检测设备连接状态和 EDID 信息。
FB struct drm_framebuffer 代表帧缓冲区,包含像素格式、宽高和内存对象。
开发提示:在 Rockchip 平台编写驱动时,最常打交道的对象是 drm_crtc 和 drm_plane,因为 VOP 硬件直接对应这两个抽象。
DRM 核心对象关系图 DRM 核心对象关系图 drm_device drm_crtc drm_plane drm_encoder drm_connector drm_framebuffer 说明:drm_device 管理所有子对象;CRTC 绑定 Plane 和 FB;Encoder 连接 CRTC 和 Connector。

1.3 Rockchip 显示硬件特点

瑞芯微 (Rockchip) 平台的显示硬件以 VOP (Video Output Processor) 为核心,集成在 SoC 内部。不同型号的 Rockchip 芯片 (如 RK3568, RK3588, RV1126) 在 VOP 数量、支持的最大分辨率和图层数上有所差异,但整体架构保持一致。

1.3.1 VOP 硬件架构

VOP 是 Rockchip 显示子系统的核心 IP,主要特点包括:

  • 多图层合成:支持多个硬件图层 (Win0 ~ Win3),每个图层可独立配置格式、位置、透明度,硬件自动合成输出。
  • 智能接口路由:VOP 内部包含多个显示接口 (如 MIPI DSI, eDP, HDMI, LVDS),可通过内部交叉开关 (Crossbar) 灵活路由到不同的物理输出端口。
  • AFBC 支持:支持 Arm Frame Buffer Compression,减少显存带宽占用。
  • HDR 处理:部分高端芯片 (如 RK3588) 支持 HDR 元数据传递和色调映射。
注意事项:Rockchip 的 VOP 驱动在主线内核和 BSP 内核中存在差异。BSP 内核通常包含更多硬件加速特性 (如 4K 合成、多路独立显示),而主线内核更注重代码规范性和通用性。开发时需确认内核版本对应的驱动能力。

1.3.2 典型 Rockchip 显示通路

以 RK3568 为例,典型的显示数据流如下:

  1. GPU 或 CPU 将渲染好的帧数据写入 GEM 对象 (dma-buf)。
  2. 用户空间通过 DRM IOCTL 提交 FB 和 Plane 配置。
  3. VOP 驱动解析配置,设置 Win 图层寄存器,启动 DMA 从 DDR 读取像素数据。
  4. VOP 内部合成器将多个 Win 图层叠加,输出到选定的显示接口 (如 HDMI TX)。
  5. 外部显示控制器 (如 HDMI PHY) 将并行数据串行化,通过物理链路发送到显示器。
Rockchip VOP 显示数据流 Rockchip VOP 显示数据流 (以 RK3568 为例) DDR 显存 VOP DMA Win 图层合成 显示接口 说明:VOP DMA 从 DDR 读取像素数据,经过 Win 图层合成后,通过显示接口 (如 HDMI/MIPI) 输出。 VOP Win 图层配置示例 Win0: 视频层 (NV12) Win1: UI 层 (ARGB) Win2: 光标层 Win3: 背景层 硬件自动按 Z-order 合成,支持 alpha 混合和全局透明度。

1.3.3 Rockchip 各系列芯片显示能力对比

芯片型号 VOP 数量 最大分辨率 图层数 特色功能
RK3568 1 4K@60fps 4 (Win0~Win3) eDP 1.3, MIPI DSI, HDMI 2.0
RK3588 2 8K@60fps 4 per VOP 双路独立显示, HDR, HDMI 2.1, DP 1.4
RV1126 1 4K@30fps 3 MIPI DSI, 低功耗显示
RK3399 2 4K@60fps 3 per VOP 双路显示, HDMI 2.0, DP 1.2
开发建议:在 Rockchip 平台开发显示驱动时,建议优先阅读芯片 TRM (Technical Reference Manual) 中 VOP 章节,重点关注 Win 图层寄存器、中断状态寄存器和接口路由配置。同时,参考内核源码 drivers/gpu/drm/rockchip/ 目录下的现有驱动实现,可以快速上手。