Android12之DRM架构(一)

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

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

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注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共享,多用于大内存复杂场景
Fencebuffer同步机制,基于内核dma_fence机制实现,用于防止显示内容出现异步问题

Refence

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/140264.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker是一个流行的容器化平台,用于构建、部署和运行应用程序。

文章目录 Web应用程序数据库服务器微服务应用开发环境持续集成和持续部署 (CI/CD)应用程序依赖项云原生应用程序研究和教育 &#x1f388;个人主页&#xff1a;程序员 小侯 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 ✨收录专栏&#xff1a;…

移动App安全检测的必要性,app安全测试报告的编写注意事项

随着移动互联网的迅猛发展&#xff0c;移动App已经成为人们日常生活中不可或缺的一部分。然而&#xff0c;虽然App给我们带来了便利和乐趣&#xff0c;但也伴随着一些潜在的安全风险。黑客、病毒、恶意软件等威胁着用户的隐私和财产安全&#xff0c;因此进行安全检测就显得尤为…

【广州华锐互动】利用AR进行野外地质调查学习,培养学生实践能力

在科技发展的驱动下&#xff0c;AR&#xff08;增强现实&#xff09;技术已经在许多领域中找到了应用&#xff0c;包括医疗、教育、建筑和娱乐等。然而&#xff0c;有一个领域尚未充分利用AR技术的潜力&#xff0c;那就是野外地质调查。通过将AR技术引入到这个传统上需要大量人…

CUDA编程入门系列(一) 什么是GPU运算?

一、GPU架构 下图为Tesla C2050的GPU架构&#xff0c;其核心由16个组所构成&#xff0c;其中红色方框为单个组的示例&#xff0c;称为SM(Stream Multiprocessor), 每个SM里面又有32个SP&#xff08;Stream Processor&#xff09;&#xff08;即小绿快&#xff09; 下图为Fermi的…

01认识微服务

一、微服务架构演变 1.单体架构 将所有的功能集中在一个项目开发&#xff0c;打成一个包部署。优点架构简单&#xff0c;部署成本低。缺点耦合度高&#xff0c;不利于大型项目的开发和维护 2.分布式架构 根据业务功能对系统进行拆分&#xff0c;每个业务模块作为独立的项目…

核酸管外观缺陷检测(二)

1.1应用示例思路 (1)创建分类器&#xff1b; (2)向分类器中添加样本&#xff1b; (3)训练分类器&#xff1b; (4) 测试数据&#xff0c;并将检测结果写入txt文件中。 1.2 应用示例相关算子介绍 (1) create_class_mlp( : : NumInput, NumHidden, NumOutput, OutputFunctio…

Flow深入浅出系列之在ViewModels中使用Kotlin Flows

Flow深入浅出系列之在ViewModels中使用Kotlin FlowsFlow深入浅出系列之更聪明的分享 Kotlin FlowsFlow深入浅出系列之使用Kotlin Flow自动刷新Android数据的策略 Flow深入浅出系列之在ViewModels中使用Kotlin Flows Flow出现后&#xff0c;LiveData仍然可以用&#xff0c;并且…

进阶JAVA篇-异常处理:解读与解决编程中的意外情况

目录 1.0 什么是异常&#xff1f; 1.1 异常主要分为两个情况分别是运行时异常、编译时异常。 2.0 怎么处理异常呢&#xff1f; 2.1 捕获异常&#xff08;Catch Exception&#xff09; 2.2 声明异常&#xff08;Declare Exception&#xff09; 3.0 自定义异常 3.1 如何定义异常类…

第60节——使用redux-toolkit实战一个商品列表的增删查改

一、样例 二、需求 调用goods.js这个单例完成对goods数据的增删查改 class Goods {constructor() {const data localStorage.getItem("qf-goods-data");this.goods data ? JSON.parse(data) : [];}time 500;/*** 获取商品* returns*/getGoods() {return new Pr…

spring6-资源操作:Resources

资源操作&#xff1a;Resources 1、Spring Resources概述2、Resource接口3、Resource的实现类3.1、UrlResource访问网络资源3.2、ClassPathResource 访问类路径下资源3.3、FileSystemResource 访问文件系统资源3.4、ServletContextResource3.5、InputStreamResource3.6、ByteAr…

联合体(共用体)

1. 联合类型的定义 联合也是一种特殊的自定义类型。 这种类型定义的变量也包含一系列的成员&#xff0c;特征是这些成员公用同一块空间。 2.联合大小的计算 联合的大小 至少是最大成员的大小 。 当最大成员大小不是最大对齐数的整数倍的时候&#xff0c;就要对 齐到最大对齐数…