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

相关推荐
芒果黑1 个月前
Qt WebEngine播放DRM音视频
drm·qt webengine
炭烤毛蛋9 个月前
modetest
drm·framebuffer
wenshizhang10 个月前
AMD显卡休眠唤醒流程分析
linux·内核·drm·amdgpu
蓝天居士1 年前
DRM全解析 —— connector详解(1)
drm
蓝天居士1 年前
DRM全解析 —— encoder详解(3)
drm
蓝天居士1 年前
DRM全解析 —— encoder详解(1)
drm
山东布谷科技官方1 年前
直播系统源码平台内容安全与版权维护技术:DRM
网络安全·drm·直播系统源码·数字版权管理·版权
风雨兼程80231 年前
Linux内核4.14版本——drm框架分析(14)——Atomic KMS 架构(struct drm_atomic_state)
drm
蓝天居士1 年前
DRM全解析 —— CREATE_DUMB(4)
linux内核·libdrm·drm