第1篇:一张图看懂Android显示完整链路

摘要
做显示驱动,最怕只盯着Panel、DRM寄存器调,看不清上层到底怎么下来的。本文自上而下梳理Android图形栈→Linux内核DRM→硬件屏幕的完整数据流,帮你建立全局认知。

前言
很多刚接触显示驱动的同学,上手就去改dts、调panel时序,遇到花屏、闪屏、黑屏,只会在驱动层瞎找。 问题有可能根本不在内核驱动,而是上层合成、Buffer分配、HWC配置出了问题。
只有把整条链路跑通,出问题你才知道:该往上查,还是往下查。
本文范围:标准Android + Linux DRM显示子系统,不涉及老旧FB架构遗留路径。
整体链路总览
App应用层 → SurfaceFlinger → HWC硬件合成器 → Gralloc内存分配 → Linux DRM子系统 → DRM/KMS框架 → Panel驱动/MIPI‑DSI → 屏幕硬件
分层自上而下拆解:

  1. App 应用层
    App 绘制UI、图片、视频,输出图形缓冲区。 App本身不直接往屏幕写数据,只是把绘制好的buffer提交给SurfaceFlinger。
    关键点:
    ●每个窗口对应一个Surface
    ●App只负责绘制,不负责多图层叠加
  2. SurfaceFlinger(图形服务中枢)
    Android图形的核心总管。 接收所有App的图层,拿到一堆独立Buffer,做图层合并。
    两种合成方式:
    1.GPU合成(CLient合成):把多个图层交给GPU渲染合成为一帧,输出一个最终buffer。
    2.HWC硬件合成(Device合成):把多个图层直接交给硬件合成器,硬件完成叠加,CPU/GPU几乎不参与。
    驱动开发经常遇到的现象:部分界面正常,特定界面花屏;切换应用闪屏,大多和合成路径切换相关。
  3. HWC 硬件合成器
    介于安卓用户态和内核之间。 SurfaceFlinger会询问HWC:哪些图层你硬件可以合成,哪些我用GPU来画。 HWC把可硬件合成的图层交给DRM去送显。
    坑点:
    ●HWC配置错误会出现图层丢失、叠加顺序错乱;
    ●很多黑屏、闪屏bug,是HWC和DRM状态不同步。
  4. Gralloc 图形内存分配器
    负责图形Buffer内存申请、共享、缓冲区管理。 所有显示Buffer都出自Gralloc。 Buffer格式、内存对齐、缓存属性配置不对,会出现色块、花屏、颜色异常。
    很多人调显示,完全忽略Gralloc,但大量诡异显示bug根源在这里。
  5. Linux内核:DRM子系统(KMS)
    进入内核空间,这就是我们驱动工程师主要打交道的模块。 DRM‑KMS:Kernel Mode Setting,内核模式设置。 主要组件:
    ●CRTC:控制器,扫描输出图像数据
    ●Encoder:编码器,把图像数据流转为传输协议(MIPI‑DSI / HDMI)
    ●Connector:连接器,代表物理输出接口
    ●Plane:图层平面,支持多图层硬件叠加
    ●Panel驱动:屏幕时序、上电序列、MIPI指令
    工作流程:上层传来buffer,DRM做framebuffer映射,CRTC驱动Encoder,按照panel时序把数据发给屏幕。
  6. Panel + MIPI‑DSI 硬件
    屏幕上电、复位、发送初始化指令、视频流传输。 我们日常改的dtsi时序、上电序列、MIPI参数全部落在这一层。
    黑屏、点不亮、花屏、色彩反转,这一层问题最多。
    一帧画面完整流程极简总结
    1.App绘制内容,产出buffer
    2.SurfaceFlinger收集全部窗口图层
    3.协商HWC/GPU合成方案
    4.Gralloc提供图形内存
    5.合成完成的Buffer下发到内核DRM
    6.DRM‑KMS配置CRTC/Encoder/Panel
    7.MIPI‑DSI发送图像数据,屏幕点亮显示画面
    为什么这条链路对你排错很重要
    1.如果所有界面都花屏:大概率偏向DRM、Panel、MIPI、时序底层问题
    2.如果只有部分App/界面异常:优先怀疑SurfaceFlinger、HWC、图层合成、buffer格式
    3.如果视频异常,UI正常:重点查HWC视频图层路径
    4.如果休眠唤醒概率性黑屏:关注DRM状态机、电源管理、Panel上电下电时序
    以后遇到bug,可以拿这条链路做二分排查:问题出在上层图形栈,还是内核DRM,,还是内核DRM,还是屏幕硬件。

读懂Android显示完整链路,多读几次,开始阶段甚至背诵都不为过,定位甩锅显示bug不再瞎猜。

更多详细笔记,WeChat公众号:素师良码

posted @ 2026-10-01 15:22  素师良码  阅读(3)  评论(0)    收藏  举报