第2篇:DRM 是什么?为什么显示驱动绕不开它?

简介: DRM是Linux显示体系的核心框架,统一管理CRTC、Encoder、Connector、Plane及内存与同步,实现安全、有序的图层提交与模式设置,是定位黑屏、花屏等显示问题的关键枢纽。

摘要

Android/Linux 显示体系里,DRM 不是某个单点模块,DRM 是 Linux 显示体系的核心框架。它统一管理 CRTC、Encoder、Connector、Plane、内存与同步,把上层图层安全提交给显示硬件;是在内核中负责显示资源管理、模式设置、图层提交和同步调度的核心框架。理解 DRM,是从“会调屏”走向“能定位黑屏、花屏、闪屏和图层异常问题”的关键一步。

前言

很多人刚接触显示驱动时,会把 DRM 理解成一个“屏幕驱动”。

其实不是。

在我理解看来DRM 更像是内核显示子系统的“基础设施”:它统一管理显卡、显示控制器、图层、连接器、内存和同步机制。Panel、MIPI、HWC 这些模块,最终都要挂到这套框架上工作。

1. DRM 到底解决了什么问题?

在 DRM 出现之前,Linux 显示路径比较分散,不同硬件各自管理显示资源,容易出现几个问题:

  • 多个程序同时申请显示资源,谁都可以抢屏幕
  • 图层叠加、模式切换没有统一协调
  • 内存管理、同步机制不统一
  • 用户态和内核态接口混乱

DRM 的目标,就是把这些能力统一起来:把显示资源抽象成统一模型,让用户态按规则申请、配置和提交。

它解决的不是“屏幕怎么亮”这一件事,而是:

  • 谁可以访问显示设备
  • 怎么设置显示模式
  • 怎么提交图层
  • 怎么分配和共享图形内存
  • 怎么同步一帧画面的完成时机,时机很关键,时机不对送来图也不会正常显示.

2. DRM 在显示链路中的位置

回顾第1篇的链路:

App → SurfaceFlinger → HWC → Gralloc → DRM → Panel / MIPI → 屏幕

DRM 位于图形链路的内核入口,是用户态和显示硬件之间的桥梁。

可以把它理解成三层:

第一层:**user space interface**

App、SurfaceFlinger、HWC 通过 libdrm 或框架接口访问 DRM。

第二层:DRM 核心框架

内核里的 DRM 子系统负责:

  • 设备初始化
  • 资源管理
  • 模式设置
  • 属性解析
  • 提交调度
  • 同步处理

第三层:硬件驱动

具体芯片的 CRTC、Encoder、Connector、Plane、Panel、MIPI 驱动,按照 DRM 框架实现硬件操作。

3. DRM 最核心的几个概念

这几个概念需要理解记忆,甚至背诵,以后看日志、看驱动代码必须认识。在MTK等平台driver代码里,专门有对应的驱动文件。

CRTC

CRTC 可以理解为“显示控制器”。

它负责把一帧数据扫描出来,按照一定时序送到显示接口。

可以简单记:

CRTC 是真正产生显示时序、扫描帧数据的地方。

Encoder

Encoder 负责把 CRTC 输出的画面数据,转换成适合当前接口传输的格式或协议。

比如:

  • 转换成 MIPI-DSI 流
  • 转换成 HDMI 信号
  • 转换成 DP 信号

可以理解为:

Encoder 是数据传输格式的转换器。

Connector

Connector 代表一个可见的显示输出接口。

比如:

  • MIPI DSI接口
  • HDMI 接口
  • DP 接口
  • 外接显示屏

用户看到的“某个屏幕已连接”,在 DRM 里通常对应一个 Connector。

Plane

Plane 是图层。

Android 里每个窗口(比如桌面和大家喜欢用的悬浮窗)、状态栏、视频层,都可能对应一个或多个 Plane(当前界面具体几个layer,需要dumpsys SurfaceFlinger确认)。

DRM 允许硬件把多个 Plane 叠加起来显示。

所以 Plane 的关键作用是:支持多图层硬件叠加。**(手机SOC硬件基本是会支持4层,当然也得看具体平台)**

FB / Framebuffer

Framebuffer 是一帧画面的内存缓冲区。

上层把绘制好的 Buffer 交给 DRM,DRM 把它映射到 Framebuffer,再由 CRTC 扫描输出。

可以理解为:Framebuffer 就是当前要显示的那帧数据。

4. DRM 提交一帧的大致过程

app要显示一帧,通常不是简单“写一下显存”,而是一个完整提交过程。

大致步骤:

  1. 准备图形 Buffer
  2. 用户态设置显示属性
  3. 检查配置是否合法
  4. commit到内核
  5. DRM 完成模式设置或更新
  6. 等待present fence,等画面真正显示完成
  7. 释放旧 Buffer

这里面最关键的一步,是“commit”。

DRM 不是改完寄存器立刻显示,而是把一次更新打包提交,由框架统一调度,通过fence来实现同步,后续章节再详细讨论。

5. 为什么现在强调 DRM Atomic?

Atomic 是 DRM 的重要改进。

它的核心思想是:把一次显示更新的所有配置,当成一个完整事务检查后再提交。

这有几个好处:

  • 多个图层、模式、属性可以一起更新
  • 配置不合法时,可以提前拒绝
  • 减少中间状态错乱
  • 更适合 Android 这种复杂合成场景

所以你会经常看到这些关键词:

  • atomic_check
  • atomic_commit
  • state
  • properties

它们本质上都围绕“原子提交”展开。

6. DRM 和 HWC 是什么关系?

这是很多人最容易混淆的地方。

可以这样理解:

  • HWC:Android 用户态的硬件合成器,决定哪些图层走硬件合成
  • DRM:Linux 内核里的显示框架,负责把最终图层提交给硬件

HWC 更像“策略选择器”,DRM 更像“执行入口”。

HWC 告诉系统:这几个图层可以硬件叠加。

然后由 DRM 完成真正的图层配置和提交。

7. 从调试角度看,DRM 为什么重要?

显示问题不一定都出在 DRM,但很多问题最终都会在 DRM 层留下痕迹。

遇到这些问题时,DRM 是关键排查点:

  • 黑屏
  • 花屏
  • 闪屏
  • 图层错位
  • 模式切换失败
  • 帧率异常
  • 休眠唤醒异常
  • Buffer 显示异常

因为 DRM 连接了:

  • 上层 Buffer
  • 图层配置
  • 显示模式
  • 同步机制
  • 硬件寄存器

所以它是显示问题的“必经之路”。

8. 初学者怎么学 DRM?

建议按这个顺序来:

第一步:先看概念

搞懂 CRTC、Encoder、Connector、Plane、Framebuffer。

第二步:看日志

用 modetest、drm_info 看系统里有哪些显示资源。

第三步:看驱动结构

不必一开始啃完整源码,先看驱动里这几个部分:

  • 初始化
  • 模式设置
  • 图层更新
  • 电源管理
  • 中断处理

第四步:再看 Atomic

理解 Atomic 前,先理解普通提交模型。后续章节再详细讨论。

结语

DRM 不是单一功能模块,而是 Linux 显示体系的骨架。

你可以暂时不深究每一个源码细节,但最好先建立这个认知:

DRM 负责统一管理显示资源,把上层图层和配置,安全、有序地提交给显示硬件。

以后遇到显示问题,不要只怀疑屏幕或 MIPI,也记得往 DRM 这条链路上看。

相关文章
|
10天前
|
人工智能 JSON API
全网刷屏的 Jev 模型正式开放!一手实战测评 + 保姆级教程
全网爆火的 Jev 模型是什么?有什么用?怎么使用?怎么接入 AI 编程工具?效果真的好么?傻子可懂的 Jev 保姆级实战教程 + 项目实战测评来啦
7740 13
|
8天前
|
人工智能 测试技术 API
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
Jev是TypeSafe AI推出的“系统一模型”,不生成文本,专做毫秒级结构化决策:Choice(多选)、Score(打分)、Noul(是非概率)。响应快193倍、成本低444倍,适合工单路由、内容审核、测试定级等高频判断场景。
1668 4
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
|
5天前
|
人工智能 JavaScript 芯片
DeepSeek 官方偷偷上传 Harness 桌面端安装包,我已经用上了。。附最新下载地址
DeepSeek Harness 官方的桌面端安装包被网友扒出来了,2 分钟讲明白如何使用,体验如何,适合作为 AI 编程工具么?附最新 Windows 和 Mac 双端的下载地址
1445 1
|
8天前
|
人工智能 并行计算 PyTorch
秋叶 ComfyUI 2026 整合包 v3.2 完整部署教程:Python 3.13 + Torch 2.13 全栈升级
秋叶aaaki ComfyUI 2026年8月整合包v3.2正式发布!全面升级Python 3.13.11、PyTorch 2.13.0+cu130及ComfyUI v0.30.2,原生支持MiniMax H3、Wan 2.2、Qwen-Image-2.1等2026主流音视频/图像模型,解压即用,无需环境配置。
1302 11
|
22天前
|
人工智能 自然语言处理 安全
阿里云千问办公 QwenWork详细介绍:产品核心能力、典型场景、价格及常见问题解答
千问办公是阿里云推出的一站式AI办公平台,主打"不止于对话,更注重交付",依托通义千问旗舰大模型,用户一句话即可完成数据分析、PPT生成、视频剪辑等复杂任务,直接输出可用成果。产品深度打通钉钉生态与企业OA,覆盖桌面端、网页端,提供企业标准版198元/人/月等多档订阅方案,新用户注册即赠2000积分,适配工程师、HR、财务等多职业办公场景,成为能动手干活的"全能AI同事"。
3694 10
|
7天前
|
人工智能 编解码 并行计算
MiniMax-H3 一键整合包技术文档:8G 显存运行 AI 漫剧制作 —— 角色替换 / 动作迁移 / 文图生视频部署与调参指南
MiniMax H3 是 MiniMax 开源的全模态视频生成模型,支持文/图/音/视多条件输入,输出最高2K、15秒带双声道音频视频。本文档详述其Int8量化版在8GB显存下的本地一键部署、三段式工作流(EDIT/REPLACE/CONTINUE)、参数调优及常见问题排查。(239字)
|
16天前
|
缓存 IDE Java
【保姆级】Android Studio下载、安装和汉化教程(2026最新)
Android Studio 是 Google 官方推出的免费 Android 应用开发集成环境,基于 IntelliJ IDEA,内置模拟器、调试器、性能分析及 Compose 界面工具,功能全面,文档丰富,是安卓开发首选工具。(239字)
1784 1

热门文章

最新文章