Linux瑞芯微平台DRM驱动与显示驱动优化实战 - 第1节

1.1 Linux 显示框架演进

Linux 显示子系统经历了从混乱到统一的演进过程。早期内核中显示驱动直接操作硬件寄存器,每个厂商实现各自的 ioctl 接口,用户态应用需要为不同硬件编写不同的适配层。这种碎片化架构在嵌入式设备爆发后变得不可持续。

1.1.1 演进路线

阶段核心机制代表接口主要问题
FBDEV (2.2~2.6)帧缓冲设备,直接映射显存/dev/fb0, FBIOGET_VSCREENINFO无硬件合成、无 VSync 控制、多屏支持弱
DRM 基础 (2.6.29+)内核显示资源管理 + 统一 APIdrmModeAddFB, drmModeSetCrtc仅支持基本 CRTC/Encoder/Connector 模型
KMS 成熟 (3.x~4.x)内核模式设置,原子化提交DRM_IOCTL_MODE_ATOMIC无显式同步、无 FB 压缩/合成卸载
DRM 增强 (5.x~6.x)Writeback、Fence、DAMAGE、VRRDRM_IOCTL_MODE_PAGE_FLIP嵌入式 SoC 显示 IP 适配仍碎片化

关键转折点:DRM 从 3.9 内核引入原子接口(Atomic Modeset),将多个显示状态更新打包为一个原子事务提交,解决了中间状态闪烁和 VSync 撕裂问题。瑞芯微从 Linux 4.4 开始全面转向 DRM/KMS 架构。

1.1.2 为什么选择 DRM/KMS

  • 资源统一管理:DRM 将 CRTC、Encoder、Connector、Plane 抽象为内核对象,用户态通过 drmModeObjectGetProperties 统一查询。
  • 原子提交:一次 DRM_IOCTL_MODE_ATOMIC 可同时设置多个 CRTC 和 Plane,硬件在 VBlank 边界一次性切换。
  • Fence 同步:显式同步机制,GPU 合成与显示刷新之间不再依赖隐式 dma_buf 等待。
  • Writeback 连接器:将合成后的帧写回内存,用于屏幕录制、远程桌面、硬件校验。
Linux 显示框架演进时间线 FBDEV Linux 2.2~2.6 DRM 基础 2.6.29+ KMS 成熟 3.x~4.x DRM 增强 5.x~6.x 演进核心驱动力 • 从单一帧缓冲 → 多平面合成 → 原子提交 → 显式同步 • 瑞芯微在 Linux 4.4 全面转向 DRM/KMS,VOP 驱动基于 DRM 框架重写

1.2 DRM/KMS 架构简介

DRM (Direct Rendering Manager) 是 Linux 内核中负责显示输出和 GPU 管理的子系统。KMS (Kernel Mode Setting) 是 DRM 的核心组件,负责显示模式设置和帧缓冲管理。理解 DRM/KMS 的软件分层是驱动开发的基础。

1.2.1 核心对象模型

DRM 对象物理对应关键属性瑞芯微实现
CRTC显示控制器(VOP/DPU 主通道)timing、pixel clock、background colorrockchip_crtc 封装 VOP 时序发生器
Plane硬件图层(Win0/Win1/Win2)format、size、src/dst rect、z-orderrockchip_plane 管理 VOP 窗口寄存器
Encoder显示信号编码器(RGB/LVDS/DP/eDP 发送器)encoder type、possible crtcsrockchip_encoder 桥接 VOP 与 PHY
Connector物理接口(HDMI/DP/MIPI DSI/eDP)edid、dpms、link statusrockchip_connector 读取 EDID 并协商链路
Bridge外部显示桥接芯片(LT8912/TC358775)pre_enable、enable、mode_valid通过 drm_bridge 框架挂载

1.2.2 原子提交流程

  1. 用户态构造请求:调用 drmModeAtomicAlloc 分配 atomic request,添加 CRTC/Plane/Connector 属性变更。
  2. 内核校验:atomic_check 回调检查资源冲突、带宽限制、格式兼容性。
  3. 硬件编程:atomic_flush 将配置写入 VOP 寄存器,等待 VBlank 信号。
  4. 完成通知:通过 drm_crtc_vblank_event 通知用户态刷新完成。
DRM/KMS 原子提交软件架构 用户态 (Weston/SurfaceFlinger) DRM 核心 (drm_atomic.c) VOP/DPU 驱动 原子提交 4 步流程 ① drmModeAtomicAlloc() → 构造属性变更集合 ② drmModeAtomicCommit(DRM_MODE_ATOMIC_ALLOW_MODESET) → 进入内核 ③ atomic_check() → 校验带宽/格式/资源冲突 ④ atomic_flush() → 写入 VOP 寄存器 + 等待 VBlank 切换 ⑤ drm_crtc_vblank_event() → 通知用户态刷新完成 ⑥ drmModeAtomicFree() → 释放请求资源

开发提示:瑞芯微 VOP 驱动在 atomic_flush 中通过 vop_cfg_done 寄存器触发硬件更新,该寄存器必须在 VBlank 窗口内写入,否则会导致画面撕裂。建议在 vop_crtc_atomic_flush 中加 spin_lock_irqsave 保护寄存器访问。

1.3 瑞芯微显示 IP 家族概览

瑞芯微 SoC 的显示 IP 分为三大类:VOP(Video Output Processor)、DPU(Display Processing Unit)和 MIPI DSI/DP/eDP 接口控制器。不同芯片代际使用的 IP 差异较大,驱动适配策略也不同。

1.3.1 VOP 系列(主流)

IP 版本代表芯片最大图层数最大分辨率输出接口
VOPBRK32883 Win + 1 HDR4K@60HDMI 2.0 / eDP 1.3 / MIPI DSI
VOPLRK33994 Win4K@60HDMI 2.0 / DP 1.2 / MIPI DSI
VOP2RK3566/RK35684 Win + 2 AFBC4K@60HDMI 2.0 / eDP 1.3 / MIPI DSI / LVDS
VOP3RK35888 Win + 4 AFBC8K@60HDMI 2.1 / DP 1.4 / eDP 1.4 / MIPI DSI

1.3.2 DPU 系列(高性能)

DPU 是瑞芯微面向 8K 和车载场景设计的高性能显示处理单元,首次在 RK3588 中引入。与 VOP 相比,DPU 增加了硬件图像增强模块:HDR 色调映射、缩放引擎、色彩校正矩阵、动态对比度调整。

  • DPU 核心模块:Scaler、CSC(色彩空间转换)、HDR10/HLG 处理、De-interlace。
  • 驱动差异:DPU 驱动使用 drm_encoder + drm_bridge 组合,而非 VOP 的 drm_crtc 直连。
  • 适用场景:8K 视频播放、多屏异显、车载仪表盘、医疗影像。

1.3.3 接口控制器

接口类型瑞芯微实现最大速率典型应用
MIPI DSIrockchip-dsi (基于 Synopsys DW-MIPI-DSI)2.5 Gbps/lane平板、车载显示屏
eDProckchip-edp (基于 Analogix ANX7625/DP138)8.1 Gbps (HBR3)笔记本、一体机
HDMIrockchip-hdmi (基于 Synopsys DW-HDMI)48 Gbps (HDMI 2.1)电视、显示器
DProckchip-dp (基于 Cadence DP-TX)32.4 Gbps (DP 1.4)高端显示器、VR
瑞芯微显示 IP 家族概览 VOP 系列 • VOPB: RK3288 • VOPL: RK3399 • VOP2: RK3566/3568 • VOP3: RK3588 DPU 系列 • RK3588 首次引入 • HDR 色调映射 • 硬件 Scaler • 色彩校正矩阵 接口控制器 • MIPI DSI • eDP • HDMI 2.0/2.1 • DP 1.4 驱动适配策略 • VOP 系列:使用 drm_crtc + drm_plane 直连模型,驱动文件 rockchip_vop.c • DPU 系列:使用 drm_encoder + drm_bridge 组合模型,驱动文件 rockchip_dpu.c • 接口控制器:通过 drm_bridge 框架挂载,与 VOP/DPU 解耦 • 同一芯片可能同时存在 VOP + DPU,通过设备树 compatible 区分

常见陷阱:RK3588 同时包含 VOP3 和 DPU,但两者不能同时用于同一个显示输出。设备树中通过 display-subsystem 节点下的 ports 绑定决定哪个 IP 驱动哪个物理接口。错误配置会导致内核崩溃或显示黑屏。

1.3.4 显示 IP 选型建议

  • 低成本平板/盒子:RK3566 + VOP2 + MIPI DSI,图层数 4 足够 UI 合成。
  • 高性能平板/笔记本:RK3588 + VOP3 + eDP,支持 4K@120 或 8K@60。
  • 车载/工业 HMI:RK3588 + DPU + LVDS/DSI,利用 DPU 的 HDR 和色彩校正。
  • 多屏异显:RK3588 支持 3 路独立显示输出,VOP3 驱动主屏,DPU 驱动副屏。

1.4 本章小结