4. RK3568 显示驱动框架:DRM/KMS 架构与 Rockchip 显示模块

RK3568 的显示子系统基于 Linux 标准 DRM (Direct Rendering Manager) / KMS (Kernel Mode Setting) 框架构建。理解这一分层架构是分析显示驱动故障(如无显示、花屏、分辨率异常)的前提。本章将拆解 DRM/KMS 核心概念、Rockchip 平台的具体实现模块(drm-rockchip、VOP、drm_dp 等),并通过 dmesg 日志定位各模块的初始化状态。

4.1 DRM/KMS 架构概览

DRM 是 Linux 内核中负责图形显示和渲染管理的子系统,KMS 是其子集,专门用于设置显示模式(分辨率、刷新率、连接器状态)。在 RK3568 上,整个显示栈从上到下分为三层:

  • 用户空间:Weston、Xorg 或 Wayland 合成器通过 libdrm 调用 DRM ioctl。
  • 内核 DRM 核心层:提供通用框架,管理 CRTC(显示控制器)、Encoder(编码器)、Connector(连接器)、Plane(图层)等抽象对象。
  • 硬件驱动层:Rockchip 实现的 drm-rockchip 驱动,包含 VOP(Video Output Processor)、DP/HDMI 等具体 IP 驱动。
关键概念对应关系:
  • CRTC → VOP(显示控制器,负责扫描输出)
  • Encoder → 内部编码模块(如 LVDS、MIPI DSI 的 DPI 接口)
  • Connector → 物理接口(HDMI、DP、eDP、MIPI DSI)
  • Plane → VOP 的硬件图层(主图层、光标图层、 overlay 图层)
DRM/KMS 分层架构与 RK3568 映射 DRM/KMS 分层架构与 RK3568 映射 用户空间:Weston / Xorg / Wayland 内核 DRM 核心层 (drm.ko) CRTC | Encoder | Connector | Plane | FB | GEM Rockchip 硬件驱动层 drm-rockchip.ko | rockchip-vop.ko | rockchip-dp.ko | rockchip-hdmi.ko VOP (CRTC) | eDP/DP (Encoder+Connector) | HDMI (Encoder+Connector) RK3568 SoC 显示硬件 (VOP + PHY + 接口)

4.2 Rockchip 显示驱动模块详解

RK3568 的显示驱动由多个内核模块组成,它们协同工作。在 dmesg 日志中,我们可以通过模块加载顺序和 probe 成功/失败信息判断故障点。

模块名称 功能角色 对应 DRM 对象 dmesg 关键搜索词
drm-rockchip 平台主驱动,注册 DRM 设备 DRM device drm-rockchip, rockchip_drm
rockchip-vop 显示输出处理器,实现 CRTC CRTC vop, vop2, rockchip-vop
rockchip-dp eDP/DP 接口驱动 Encoder + Connector rockchip-dp, cdn-dp
rockchip-hdmi HDMI 接口驱动 Encoder + Connector rockchip-hdmi, dw-hdmi
rockchip-mipi-dsi MIPI DSI 接口驱动 Encoder + Connector rockchip-mipi-dsi
rockchip-lvds LVDS 接口驱动 Encoder + Connector rockchip-lvds
调试提示: 在 dmesg 中搜索 probe + 模块名(如 rockchip-vop probe)可以快速确认驱动是否成功加载。若出现 probe failed 或 defer,通常表示依赖的时钟、电源域或 PHY 未就绪。

4.3 VOP(Video Output Processor)—— 核心 CRTC

VOP 是 RK3568 的显示控制器,负责从内存中读取帧缓冲数据,合成图层,并按照设定的时序输出到显示接口。RK3568 集成的是 VOP2,支持多图层、AFBC(帧缓冲压缩)和最高 4K@60fps 输出。

VOP 在 dmesg 中的典型初始化日志片段:

[    2.345678] rockchip-vop2 fe040000.vop: Adding to iommu group 0
[    2.345789] rockchip-vop2 fe040000.vop: [drm] vop2 probe success
[    2.345890] rockchip-vop2 fe040000.vop: [drm] vop2 supports: 4K@60, AFBC, 3 layers

VOP 的关键硬件特性:

  • 多图层支持:通常包含 1 个主图层(Smart0)、1 个光标图层(Cursor)和 1 个 overlay 图层(Smart1)。
  • AFBC (Arm Frame Buffer Compression):减少内存带宽占用,但需要用户空间配合。
  • IOMMU 集成:VOP 通过 IOMMU 访问物理内存,IOMMU 故障会导致黑屏或花屏。
VOP 内部数据流与图层合成 VOP 内部数据流与图层合成 DDR 帧缓冲 IOMMU VOP2 核心 图层合成 + 时序生成 Smart0 | Smart1 | Cursor 显示接口 VOP 数据流说明 1. VOP 通过 IOMMU 从 DDR 读取帧缓冲数据 2. 内部合成器将多个图层叠加(支持 alpha 混合) 3. 生成符合 VESA/CEA 标准的视频时序输出 4. 输出到 eDP/HDMI/MIPI 等物理接口

4.4 drm_dp 与 eDP/DP 接口驱动

RK3568 通常通过 eDP (Embedded DisplayPort) 连接内置 LCD 屏幕,或通过 DP (DisplayPort) 连接外部显示器。驱动基于 drm_dp 辅助框架和 rockchip-dp 实现。

eDP/DP 驱动的初始化流程在 dmesg 中通常表现为:

[    2.456789] rockchip-dp fe0c0000.edp: [drm] edp probe success
[    2.456890] rockchip-dp fe0c0000.edp: [drm] Detected DP version 1.4
[    2.456901] rockchip-dp fe0c0000.edp: [drm] Max link rate: 5.4 Gbps, lane count: 4
[    2.457012] rockchip-dp fe0c0000.edp: [drm] EDID read success: BOE NV156FHM-N49

常见故障点:

  • EDID 读取失败:dmesg 中出现 EDID read failed,通常导致无法获取屏幕分辨率,输出黑屏或默认 1024x768。
  • Link Training 失败:出现 link training failed,表现为屏幕闪烁或无显示。
  • HPD (Hot Plug Detect) 异常:eDP 屏的 HPD 信号不稳定会导致驱动反复 probe。
排查要点: 如果 dmesg 中 rockchip-dp 显示 probe defer,请检查 VOP 和 PHY 驱动是否先于 DP 驱动加载。DP 驱动依赖 VOP 提供的 CRTC 和 PHY 提供的时钟。

4.5 模块依赖与初始化顺序

显示驱动的加载顺序至关重要。错误的顺序会导致 probe defer 或 EPROBE_DEFER。以下是 RK3568 显示模块的推荐加载顺序:

  1. 时钟与电源域:clk, regulator, pinctrl
  2. PHY 驱动:如 rockchip-dp-phy 或 inno-hdmi-phy
  3. VOP 驱动:rockchip-vop (CRTC)
  4. 接口驱动:rockchip-dp, rockchip-hdmi, rockchip-mipi-dsi
  5. 主 DRM 驱动:drm-rockchip (绑定所有组件)

在 dmesg 中,可以通过时间戳判断顺序是否异常:

[    2.123456] rockchip-vop2 fe040000.vop: probe success
[    2.123789] rockchip-dp fe0c0000.edp: probe defer (waiting for vop)
[    2.345678] rockchip-dp fe0c0000.edp: probe success (retry after vop ready)
dmesg 过滤命令: 使用 dmesg | grep -E "rockchip|vop|drm|edp|hdmi|dp" 快速过滤所有显示相关日志。

4.6 本章小结