Android12之DRM架构(一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中......】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
更多原创,欢迎关注:Android系统攻城狮

1.前言

本篇目的:理解DRM架构。

2.DRM和FrameBuffer对比优点

  • DRM是Android和Linux目前主流的图形显示框架,比起FrameBuffer架构,DRM有更多强大的功能。
  • 而FrameBuffer架构只支持单纯的显示。
  • DRM支持VSYNC、DMA-BUF、异步更新、Fence等机制等等。DRM可以统一管理GPU渲染图形和Display显示控制,它可谓是新的"图形大管家"。

3.DRM架构图

4.DRM模块组成

<1>.DRM从模块上划分,分为三个部分,包括libdrm、KMS、GEM。

  • libdrm

直接访问DRM驱动,对访问DRM驱动的ioctl()接口进行封装

  • KMS

KMS全称:Kernel Mode Setting。它的主要工作内容:设置显示参数和更新画面。

更新画面:显示图形buffer切换,多plane图层合成方式和plane显示位置。

参数参数:刷新率(fps)、分辨率、亮屏与灭屏等。

  • GEM

GEM全称:Graphic Execution Manager:功能为显示图形Buffer的分配和释放,它是DRM与GPU衔接的接口。

plane是连接 framebuffer和crtc 的纽带,而 encoder 则是连接 crtc 和 connector 的纽带。

与物理 buffer 直接打交道的是 gem 而不是 framebuffer。

5.KMS和GEM组成部分?

KMS:FrameBuffer、CRTC、ENCODER、CONNECTOR、PLANE、、VBLANK、Property

GEM:DUMB、PRIME、Fence

DRM组层部分 功能描述
FrameBuffer 表示单个图层的显示内容,唯一一个和硬件无关的基本元素
CRTC 表示显示控制器:对FrameBuffer数据进行扫描,产生时序信号的硬件模块
ENCODER 将CRTC输出的timing时序转换成外部设备所需要的信号的模块,如HDMI转换器或DSI Controller
CONNECTOR 连接物理显示设备的连接器,如HDMI、DisplayPort、DSI总线,通常和Encoder驱动绑定在一起
PLANE 硬件图层,有的Display硬件支持多层合成显示,但所有的Display Controller至少要有1个plane
VBLANK 软件和硬件的同步机制,RGB时序中的垂直消影区,软件通常使用硬件VSYNC来实现
Property 任何你想设置的参数,都可以做成property,是DRM驱动中最灵活、最方便的Mode setting机制
DUMB 只支持连续物理内存,基于kernel中通用CMA API实现,多用于小分辨率简单场景
PRIME 连续、非连续物理内存都支持,基于DMA-BUF机制,可以实现buffer共享,多用于大内存复杂场景
Fence buffer同步机制,基于内核dma_fence机制实现,用于防止显示内容出现异步问题

Refence

相关推荐
DeeplyMind14 天前
AMD KFD的BO设计分析系列3-4:Linux DRM GEM mmap 与 drm_vma_offset_node 机制详解
linux·drm·opengl驱动·drm_gem_object
林政硕(Cohen0415)6 个月前
Linux驱动开发进阶(七)- DRM驱动程序设计
linux·驱动开发·drm
songze_lee8 个月前
openharmony系统移植之显示驱动框架从framebuffer升级为drm(linux-5.10)
linux·openharmony·drm
AlfredZhao9 个月前
永远不要轻易设置Oracle的隐藏参数,哪怕是DRM
oracle·drm·_gc_undo_affinity
芒果黑1 年前
Qt WebEngine播放DRM音视频
drm·qt webengine
炭烤毛蛋2 年前
modetest
drm·framebuffer
wenshizhang2 年前
AMD显卡休眠唤醒流程分析
linux·内核·drm·amdgpu
蓝天居士2 年前
DRM全解析 —— connector详解(1)
drm
蓝天居士2 年前
DRM全解析 —— encoder详解(3)
drm