2. RK平台显示硬件架构
在RK3588与RK3568平台上,显示子系统由显示控制器(VOP)、显示接口(DSI/DP/HDMI)以及多图层硬件叠加引擎三大部分构成。理解这三者的协作关系,是后续配置Weston与调试显示性能的基础。
2.1 显示控制器(VOP)架构
VOP(Video Output Processor)是Rockchip SoC内部的显示处理核心,负责从内存中读取帧缓冲区(Framebuffer),完成图层合成、缩放、色彩转换后,将像素数据发送给下游显示接口。RK3588与RK3568的VOP在管线数量与性能上存在差异。
| 特性 | RK3588 VOP | RK3568 VOP |
|---|---|---|
| 显示管线数量 | 4路独立显示管线 | 2路独立显示管线 |
| 最大输出分辨率 | 8K@60fps(单管线) | 4K@60fps(单管线) |
| 硬件图层(Win) | 每管线最多8个图层 | 每管线最多4个图层 |
| AFBC支持 | 支持(硬件解压) | 支持(硬件解压) |
| HDR处理 | HDR10/HLG | HDR10 |
开发提示:RK3588的4路管线可以同时驱动4个不同的显示接口(如HDMI0+HDMI1+DP0+DSI),而RK3568的2路管线通常用于主屏+副屏或主屏+同显。在Weston配置中,需要根据实际使用的管线数量设置后端(DRM-backend)的outputs参数。
下图展示了RK3588 VOP的内部数据流与管线结构:
2.2 显示接口:DSI / DP / HDMI
VOP合成后的像素数据通过内部总线发送给对应的显示接口控制器(PHY)。RK3588与RK3568集成了多种接口,各自适用于不同的显示场景。
2.2.1 接口类型与特性对比
| 接口 | 最大分辨率 | 典型应用 | RK3588 数量 | RK3568 数量 |
|---|---|---|---|---|
| HDMI TX | 8K@60fps (HDMI 2.1) | 电视、显示器 | 2 | 1 |
| DP | 8K@30fps (DP 1.4) | USB-C扩展、高刷屏 | 2 | 1 |
| DSI | 4K@60fps (DSI 2.0) | MIPI屏、平板 | 2 | 1 |
| eDP | 4K@60fps | 笔记本内置屏 | 1 | 0 |
接口配置陷阱:在RK3588上,HDMI0与DP0共用同一路VOP管线(管线0),不能同时独立输出不同的画面。HDMI1与DP1同理。DSI0与eDP也共享管线资源。在Weston中配置多个output时,必须确认对应的VOP管线没有被重复分配。
2.2.2 接口数据流
以HDMI接口为例,数据从VOP到物理连接器的完整路径如下:
- VOP 输出并行RGB/YCbCr像素数据及同步信号。
- HDMI控制器 将并行数据编码为TMDS串行信号,并插入音频/辅助数据。
- HDMI PHY 驱动TMDS差分信号到物理连接器。
- EDID 通过I2C总线读取显示器能力(分辨率、刷新率、色彩空间)。
DSI接口则使用D-PHY高速串行传输,支持命令模式与视频模式。DP接口基于微包架构,通过AUX通道进行链路训练与配置。
2.3 多图层叠加原理
RK平台的VOP内部包含多个硬件窗口(Win),每个窗口可以独立配置源地址、像素格式、透明度、位置和大小。Weston/DRM后端通过drmModeSetPlane将客户端缓冲区直接提交到硬件窗口,实现零拷贝合成。
2.3.1 硬件图层栈
下图展示了一个典型的4图层叠加场景:
2.3.2 图层属性与约束
每个硬件窗口(Win)具有以下可配置属性:
- 源地址:物理内存地址,必须按256字节对齐。
- 像素格式:支持XR24/AR24(RGB)、NV12/NV16(YUV)、XU24/AU24等。
- 全局Alpha:0~255,对整个窗口做透明度混合。
- 预乘Alpha:启用后,像素的RGB分量已乘以Alpha值。
- Z-order:窗口的叠加顺序,值越小越靠近底层。
- 缩放系数:支持1/16~16倍缩放,使用VOP内置的Bicubic/Bilinear滤波器。
性能关键点:Weston的DRM后端会优先将客户端surface分配到硬件窗口。如果窗口数量不足(例如RK3568只有4个Win),多余的surface会由Pixman软件合成到单个缓冲区中,再提交给硬件。这会导致CPU负载上升和帧率下降。调试时可通过
drm_info工具查看当前使用的plane数量。
2.3.3 叠加合成流程
VOP内部按以下顺序完成图层合成:
- 读取:从DDR读取每个Win的帧数据(支持AFBC解压)。
- 格式转换:YUV→RGB转换(如果源格式是YUV)。
- 缩放:根据配置的缩放系数进行硬件缩放。
- Alpha混合:按Z-order从低到高逐层混合,公式为
out = src * alpha + dst * (1 - alpha)。 - 输出:将最终像素数据发送到显示接口的FIFO。
整个流程在VOP内部以流水线方式执行,每个时钟周期可以处理多个像素,延迟极低(通常小于1帧)。
2.4 设备树中的显示配置
显示硬件拓扑在设备树(Device Tree)中通过vop、hdmi、dsi、dp等节点描述。以下是一个RK3588设备树中VOP与HDMI0的典型配置片段:
/* RK3588 设备树显示节点示例 */
&vop {
status = "okay";
assigned-clock-rates = <750000000>; /* VOP时钟频率 */
};
&vop_mmu {
status = "okay";
};
&hdmi0 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <hdmim0_tx0_cec &hdmim0_tx0_hpd &hdmim0_tx0_scl &hdmim0_tx0_sda &hdmim0_tx1_hpd>;
hdmi-tx-map = <0>; /* 映射到VOP管线0 */
};
&route_hdmi0 {
status = "okay";
connect = <&vop_out_hdmi0>; /* 连接VOP输出端口 */
};
调试命令:在系统启动后,使用
cat /sys/kernel/debug/dri/0/state 可以查看当前DRM对象的完整状态,包括每个plane的格式、位置和Z-order。这是验证硬件图层分配是否正确的第一手工具。