3. 显示硬件基础
在 Linux 图形栈故障诊断中,绝大多数“黑屏、花屏、分辨率不对、刷新率上不去、外接屏不亮”的问题,最终都会落到显示硬件链路的某一环。理解从 GPU 到面板的完整通路,是定位问题的第一步。本节把这条链路拆成可观测、可验证的若干环节,并给出显示时序的基础概念。
一、显示通路的整体结构
一次完整的显示输出,数据从 GPU 内部的渲染管线产生,经过显示控制器(Display Controller)扫描输出,再由 CRTC 生成时序,交给编码器(Encoder)转换为目标协议信号,通过连接器(Connector)与线缆到达显示器或面板。软件侧则由 DRM/KMS 框架用对象模型描述这条链路。
二、各环节职责与关键参数
GPU 与显示控制器:GPU 负责渲染,显示控制器负责把 Framebuffer 扫描输出。现代 SoC 中显示控制器常包含多个 CRTC、多个 Plane 和缩放单元。若 Plane 数量不足,多图层合成会失败;若带宽不足,高分辨率高刷新率会掉帧或黑屏。
CRTC:CRTC 是“时序发生器”,决定像素时钟、行场同步、前后沿。一个 CRTC 同一时刻只能驱动一条输出链路。多屏场景下,CRTC 数量是硬约束。
编码器:把并行像素流转换为 DP、HDMI、eDP 等协议信号。编码器与连接器之间是多对多关系,软件需要选择一条可用路径。
连接器与 EDID:连接器代表物理接口,其状态由热插拔检测(HPD)决定。EDID 是显示器通过 DDC 通道提供的“能力清单”,包含支持的分辨率、刷新率、像素时钟上限和物理尺寸。EDID 读取失败时,内核常回退到安全模式(如 1024x768)。
面板与接口:eDP 多用于笔记本内置屏,支持面板自刷新(PSR);DP 支持多流传输(MST);HDMI 在消费显示中常见。接口不同,带宽、音频、HDR 能力都不同。
三、显示时序基础
一帧画面由有效像素区和消隐区组成。水平方向有 HActive、HFrontPorch、HSync、HBackPorch;垂直方向同理。像素时钟 = 总像素数 × 总行数 × 刷新率。若像素时钟超过链路带宽,就会出现“模式被拒绝”或黑屏。
# 查看连接器与模式
cat /sys/class/drm/card0-DP-1/status
cat /sys/class/drm/card0-DP-1/modes
# 查看 EDID 原始数据
cat /sys/class/drm/card0-DP-1/edid | hexdump -C | head
# 使用 modetest 查看 KMS 对象
modetest -M i915 -c -p -e -f
四、典型故障场景与排查清单
| 现象 | 可能环节 | 验证方法 |
|---|---|---|
| 外接屏无信号 | 连接器 / HPD / 线缆 | 查看 status 是否为 connected |
| 分辨率只有 1024x768 | EDID 读取失败 | 读取 edid 节点,检查校验和 |
| 刷新率上不去 | 带宽 / 像素时钟 | 核对 modes 与链路速率 |
| 多屏只能亮一个 | CRTC 数量不足 | modetest 查看 CRTC 资源 |
| 内屏闪烁 | eDP PSR / 背光 | 关闭 PSR 对比测试 |
掌握这条硬件链路和时序概念后,后续的 DRM/KMS 调试、日志分析和故障定位都会变得有据可依。建议在实验机上用 modetest 和 sysfs 节点反复观察各对象状态,建立对显示通路的直观认识。