Linux瑞芯微平台显示驱动开发实战 - 第1节
1.1 显示子系统整体架构
在 Linux 系统中,显示子系统负责将应用程序的图形输出最终呈现到显示设备上。其整体架构采用分层设计,从上至下依次为:用户空间图形栈、内核空间 DRM 核心层、硬件驱动层以及物理显示硬件。这种分层结构实现了图形应用与底层硬件的解耦,使得同一套用户空间接口可以适配不同的显示硬件平台。
架构核心目标:提供统一的显示缓冲区管理、模式设置、页面翻转和合成输出机制,屏蔽不同 SoC 显示控制器的硬件差异。
从上图可以看出,显示子系统的核心在于 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 硬件直接对应这两个抽象。
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 为例,典型的显示数据流如下:
- GPU 或 CPU 将渲染好的帧数据写入 GEM 对象 (dma-buf)。
- 用户空间通过 DRM IOCTL 提交 FB 和 Plane 配置。
- VOP 驱动解析配置,设置 Win 图层寄存器,启动 DMA 从 DDR 读取像素数据。
- VOP 内部合成器将多个 Win 图层叠加,输出到选定的显示接口 (如 HDMI TX)。
- 外部显示控制器 (如 HDMI PHY) 将并行数据串行化,通过物理链路发送到显示器。
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/ 目录下的现有驱动实现,可以快速上手。