目录
axi总线架构
DRM Overlay Plane 原理图
overlay总体框图
RK3588 VOP2
视频与UI控制融合
使用各种AI 工具学习或者工作,当时与AI聊天,明白了,然而由于AI给出的答案,不像自己一点点学习的,易忘。因而后续针对性记录搭建完整只是结构。
axi总线架构
下面这个网站链接方便编辑mermaid,导出图片。
BOM Management and PCB | Mermaid Chart
上图中有个不对的地方,但好像直接用mermaid改不了,即方向。
1) 接收写响应。应该从SLAVE 到master
2) 读数据同样的。
这个图比较直观的展示了AXI的各个信号及协议交互。
下面这章则描述了各个信号的中文名称。
BOM Management and PCB | Mermaid Chart
DRM Overlay Plane 原理图
overlay总体框图
DRM (Direct Rendering Manager) 是 Linux 内核中负责 GPU 显示管理的子系统。Overlay Plane 是 DRM 框架中一种硬件层面的独立显示图层,与 Primary Plane(主图层)和 Cursor Plane(光标图层)并列。
简单来说,Overlay 就是显示器硬件本身支持的"画中画"功能——它允许系统同时显示多个独立的图像层,由显示控制器硬件直接合成,而无需 CPU/GPU 参与逐像素混合。
独立处理:每个 Overlay Plane 可以独立进行缩放、裁剪、旋转、颜色空间转换(如 YUV→RGB)。
RK3588 VOP2
[v4] Add VOP2 support on rk3588 | Patchew
\Linux\Common\DISPLAY\Rockchip_VOP2_Plane_Assign.pdf
上面AI生成的图还是挺可靠的,下面是官方文档里面的图。
每个硬件 Window 在 DRM 子系统中注册为一个独立的 Plane:
硬件 Window (8个) DRM Plane (8个) ├─ Cluster Win0 ───────→ DRM_PLANE_TYPE_OVERLAY (或 PRIMARY) ├─ Cluster Win1 ───────→ DRM_PLANE_TYPE_OVERLAY ├─ Cluster Win2 ───────→ DRM_PLANE_TYPE_OVERLAY ├─ Cluster Win3 ───────→ DRM_PLANE_TYPE_OVERLAY ├─ Esmart Win0 ───────→ DRM_PLANE_TYPE_OVERLAY (或 PRIMARY) ├─ Esmart Win1 ───────→ DRM_PLANE_TYPE_OVERLAY ├─ Esmart Win2 ───────→ DRM_PLANE_TYPE_OVERLAY └─ Esmart Win3 ───────→ DRM_PLANE_TYPE_OVERLAY| 特性 | Cluster Window | Esmart Window |
| **DRM Plane 类型** | `OVERLAY` / `PRIMARY` | `OVERLAY` / `PRIMARY` |
| **AFBC 压缩** | ✅ 支持 | ❌ 不支持 |
| **RGB 格式** | ✅ Linear RGB | ✅ Linear RGB |
| **YUV 格式** | ✅ 仅 AFBC YUV | ✅ Linear YUV (NV12/NV20/NV30) |
| **最大分辨率** | 4K\@60Hz | 4K\@60Hz |
| **典型用途** | 视频播放 (AFBC)、主画面 | UI 层、摄像头预览、普通视频 |
下表第二列有待验证
| Video Port | DRM CRTC | 最大输出 | 可连接接口 |
| VP0 | CRTC0 | 4096×2160 | HDMI0 / DP0 / MIPI-DSI |
| VP1 | CRTC1 | 4096×2160 | HDMI1 / DP1 / MIPI-DSI |
| VP2 | CRTC2 | 4096×2160 | eDP / MIPI-DSI |
| VP3 | CRTC3 | 2048×1080 | MIPI-DSI / RGB |
视频与UI控制融合
显⽰通路
再次浏览这个图。在代码部分分配的framebuffer实际可以不止一个,存在多个,每个对应一个plane。在旧有的知识结构中,可能以为每个显示接口只能一个framebuffer,而通过上面几章的介绍,可以明确了解plane的在这方面的应用。
DRM 驱动Ä libdrm 的交互过程
下图清晰两个事情:
1) DRM的独占性。
2)概念与硬件的关联。例如CRTC对应3588的VOP组件;plane对应3588 内部的cluster等;而encoder和connector则对应具体的显示接口。
分辨率支持
方案设计与设备选项时关注上限支持情况。
RK3588 平台有四路独⽴的 Video Port, 所以在最基础的条件下,RK3568 和 RK3588 可以分别实现 3 路和 4 路独⽴的显⽰输出。
多屏显⽰
Connector-mirror
如图所⽰,在 RK3588 上,通过 connector-mirror 技术,把两路 HDMI/eDP 连接在 VP0 上,把两路 DP 连接在 VP1 上,把两路 MIPI DSI连接在 VP2 上,VP3 通过 BT656,BT1120 可以同时输出 7 路,四组独⽴的显⽰输出,其中每⼀组(同⼀个 VIdeo Port 上的两个显⽰接口)输出的显⽰时序相同,且显⽰内容相同
Connector-split
可以让⼀路 Video Port 输出按照⽔平⽅向平分成左右两路,同时驱动两个显⽰接口,显⽰时序相同,内容独⽴的画⾯。
如果在 VP0 上开启 split 模式,则 VP0 的输出可以同时驱动两个显⽰接口(HDMI0/1、eDP0/1 或者其他能与 VP0 连接的显⽰接口),两个显⽰接口上显⽰的内容为 VP0 输出的内容⽔平⽅向左右平分,⽐如VP0 以 3840x1080 的分辨率输出,则两个显⽰接口各显⽰ 1920x1080 的输出。
需要注意的是,每⼀个 VP 上参与 split 输出的两个显⽰接口,输出的时序,帧率必须相同。
假设用此种显示方法:
提问AI :
1)现在有两个4K的显示器,如何设置? 请给出mermaid图,从plane VOP 到显示的图。不用太多文字。
2)把视频和UI 图层用两个plane画。 图的方向,plane在左, HDMI在右侧,而非这种上下模式。
AI 给出图示
BOM Management and PCB | Mermaid Chart
BOM Management and PCB | Mermaid Chart
这种显⽰特性可以通过 dts 开关,dts 只要把参与 split 的两个显⽰接口挂接在同⼀个 VP 上,且打开左边显⽰接口的 split-mode 属性。⽐如 ,按照如下配置,打开 hdmi0 和 hdmi1 在 VP0 上的 split 功能:
&hdmi0 { status = "okay"; }; &hdmi1 { status = "okay"; split-mode; //左右咋区分的??? }; &hdmi0_in_vp0 { status = "okay"; }; &hdmi1_in_vp0 { status = "okay"; }; &hdmi0_in_vp1 { status = "disabled"; }; &hdmi0_in_vp2 { status = "disabled"; }; &hdmi1_in_vp1 { status = "disabled"; }; &hdmi1_in_vp2 { status = "disabled"; };每个Video Port 上进⾏ split 的两个显⽰接口只会向 drm 系统注册⼀个 encoder 和 connector,所以在⽤⼾空间,每⼀ CRTC(Video Port) 上只会看到⼀个 connector 设备,这个信息可以通过 modetest 的输出确认