1. RK3399平台概述:芯片架构、显示子系统框图、显示驱动栈(DRM/KMS)简介

1.1 芯片架构概览

RK3399 是 Rockchip 推出的高性能、低功耗六核 64 位处理器,采用 big.LITTLE 大小核架构,广泛应用于智能显示、边缘计算、数字标牌及高端平板设备。其核心计算单元由 双核 Cortex-A72(性能核)与 四核 Cortex-A53(效率核)组成,搭配 Mali-T860 MP4 GPU,提供强大的图形与视频处理能力。

架构要点: RK3399 的异构计算设计使其在显示驱动开发中需要特别关注大小核调度、GPU 与 VPU 的显存带宽竞争,以及多显示控制器之间的时钟同步。

下表列出了与显示驱动开发密切相关的关键 IP 模块及其功能:

IP 模块 功能描述 驱动栈位置
Cortex-A72 x2 高性能计算核心,运行 DRM/KMS 用户态与内核态逻辑 CPU 侧
Mali-T860 MP4 四核 GPU,负责 3D 渲染与合成 DRM GEM / GPU 驱动
VOPB / VOPL 视频输出处理器,支持多图层叠加与显示时序生成 DRM CRTC / Encoder
HDMI / DP / MIPI DSI 物理显示接口,负责信号传输 DRM Connector / Bridge
I2C / SPI / GPIO 外设控制总线,用于触摸、背光、EDID 读取 设备树 / 平台驱动
RK3399 芯片架构框图 RK3399 芯片架构框图 Cortex-A72 双核 性能核 (big) L2 Cache 1MB 频率 1.8GHz Cortex-A53 四核 效率核 (LITTLE) L2 Cache 512KB 频率 1.4GHz Mali-T860 MP4 OpenGL ES 3.2 / Vulkan 显存带宽 9.6GB/s 支持 AFBC 压缩 显示子系统 VOPB / VOPL HDMI / DP / MIPI 多图层硬件叠加 系统总线与内存 CCI-400 一致性总线 DDR3/LPDDR3/LPDDR4 双通道 64bit VPU 编解码器 ISP 图像处理器 PCIe / USB3.0 GMAC 以太网

1.2 显示子系统框图

RK3399 的显示子系统以 VOP(Video Output Processor) 为核心,包含两个独立的显示通道:VOPB(Big) 和 VOPL(Little)。VOPB 支持最高 4K@60fps 输出,VOPL 支持 4K@30fps 或 2K@60fps。每个 VOP 内部集成多个硬件图层(Win0-Win4),支持缩放、旋转、Alpha 混合等操作。

显示数据流路径如下:

  1. GPU/VPU 渲染帧缓冲区到 DDR。
  2. VOP 通过 AXI 总线从 DDR 读取图层数据。
  3. VOP 内部完成图层合成后,生成并行 RGB/LVDS 或串行 DP/HDMI 信号。
  4. 物理接口(PHY) 将信号转换为标准电气协议发送到显示器。
调试提示: 在设备树中,VOPB 和 VOPL 的 status 属性、clock-frequency 以及 port 端点连接关系是显示驱动能否正确初始化的关键。务必检查 vopb_out 与 hdmi_in 的 phandle 是否匹配。
RK3399 显示子系统框图 RK3399 显示子系统数据流 GPU / VPU 渲染帧到 DDR DDR 帧缓冲 双通道 64bit VOPB Win0-Win4 图层 4K@60fps Alpha / 缩放 / 旋转 VOPL Win0-Win2 图层 4K@30fps 低功耗通道 显示接口 HDMI 2.0 / eDP 1.3 MIPI DSI (4-lane) DisplayPort 1.2 显示接口 LVDS / RGB 并行 MIPI DSI (4-lane)

1.3 显示驱动栈:DRM/KMS 简介

RK3399 的显示驱动基于 Linux 内核的 DRM(Direct Rendering Manager) 和 KMS(Kernel Mode Setting) 框架。DRM 提供用户态与内核态之间的图形缓冲区管理(GEM)、同步对象(Fence)及渲染命令提交接口;KMS 负责显示模式设置、图层配置、连接器管理及页面翻转。

驱动栈分层如下:

层次 组件 职责
用户态 libdrm / Weston / Xorg 合成器、窗口管理、模式设置请求
内核 DRM Core drm.ko / drm_kms_helper.ko 对象模型、IOCTL 分发、FB 管理
KMS 组件 CRTC / Plane / Encoder / Connector 显示时序、图层叠加、信号编码、物理连接
平台驱动 rockchip_drm_vop.ko / dw_hdmi-rockchip.ko 硬件寄存器操作、时钟/复位/电源管理
常见陷阱: 在 RK3399 上,如果设备树中 vopb 的 assigned-clock-rates 设置不正确,KMS 在 drm_atomic_commit 阶段可能返回 -EINVAL,导致屏幕无输出。务必使用 clk_summary 确认 VOP DCLK 频率。
DRM/KMS 驱动栈架构图 DRM/KMS 显示驱动栈 用户态 libdrm | Weston (Wayland) | Xorg | 合成器 系统调用 (IOCTL) 内核 DRM Core drm.ko | drm_kms_helper.ko | GEM | Fence | 对象模型 KMS 组件 CRTC (VOP) | Plane (Win) | Encoder (HDMI/DP) | Connector 平台驱动 (rockchip_drm_vop / dw_hdmi-rockchip)

1.4 设备树中的显示节点关系

在 RK3399 平台,设备树(Device Tree)是描述硬件拓扑与资源配置的核心文件。显示相关的节点通常位于 arch/arm64/boot/dts/rockchip/rk3399.dtsi 中,主要包括:

  • vopb / vopl:显示输出处理器节点,包含 clocks、interrupts、iommus 及 ports 子节点。
  • hdmi / dp / mipi_dsi:物理接口节点,通过 port 与 VOP 的 out_port 连接。
  • route:路由节点,指定哪个 VOP 连接到哪个接口,例如 route_hdmi。
// rk3399.dtsi 中 VOPB 与 HDMI 的连接示例
vopb: vop@ff900000 {
    compatible = "rockchip,rk3399-vop-big";
    reg = <0x0 0xff900000 0x0 0x3efc>;
    interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>;
    clocks = <&cru ACLK_VOP0>, <&cru HCLK_VOP0>, <&cru DCLK_VOP0>;
    clock-names = "aclk_vop", "hclk_vop", "dclk_vop";
    status = "disabled";

    vopb_out: port {
        #address-cells = <1>;
        #size-cells = <0>;
        vopb_out_hdmi: endpoint@0 {
            reg = <0>;
            remote-endpoint = <&hdmi_in_vopb>;
        };
    };
};

hdmi: hdmi@ff940000 {
    compatible = "rockchip,rk3399-dw-hdmi";
    reg = <0x0 0xff940000 0x0 0x20000>;
    interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
    clocks = <&cru PCLK_HDMI_CTRL>, <&cru SCLK_HDMI_SFR>, <&cru SCLK_HDMI_CEC>;
    clock-names = "pclk", "isfr", "cec";
    status = "disabled";

    ports {
        #address-cells = <1>;
        #size-cells = <0>;
        hdmi_in: port {
            #address-cells = <1>;
            #size-cells = <0>;
            hdmi_in_vopb: endpoint@0 {
                reg = <0>;
                remote-endpoint = <&vopb_out_hdmi>;
            };
        };
    };
};
调试命令: 使用 dtc -I dtb -O dts rk3399-evb.dtb | grep -A 20 vopb 可以快速检查实际加载的设备树中 VOPB 节点的状态与连接关系。