DRM系列二:DRM总体介绍

news/2025/2/2 23:33:45/

一、简介

DRM,全称Direct Rending Manger。是目前Linux主流的图形显示框架。相比较传统的Framebuffer(FB原生不支持多层合成,不支持VSYNC,不支持DMA-BUF,不支持异步更新,不支持fence机制等等),而这些功能DRM原生都支持,因此DRM更能适应当今硬件。并且
DRM可以支持GPU、3D渲染显示等,统一管理GPU、Display驱动,使得软件架构更统一、方便开发和维护。

二、划分

从模块上划分,DRM可以简单分为三部分:libdrm、KMS、GEM。

2.1libdrm

libdrm是DRM框架提供的、位于用户空间的、操作DRM的库。应用程序调用内核里面的KMS和GEM,访问显示相关的资源。其原理是对底层接口进行封装,向上层提供通用的API接口,主要是对各种IOCTL接口进行封装。

2.2KMS(Kernel Mode Setting)

KMS是DRM框架的一个大模块,主要功能是:显示参数设置及显示控制。
显示控制:包括buffer的切换,多图层的合成方式,以及每个图层的显示位置。
显示参数设置:包括分辨率、刷新率、电源状态(休眠唤醒)等。

2.3GEM(Graphic Execution Manager)

GEM主要负责显示内存的分配和释放,也是GPU唯一用到DRM的地方。

三、基本元素

DRM框架涉及到的元素很多,大致如下:
KMS:CRTC,ENCODER,CONNECTOR,PLANE,FB,VBLANK,property
GEM:DUMB、PRIME、fence

3.1KMS

在这里插入图片描述

3.1.1DRM Framebuffer

它是一块内存区域,驱动和应用层都能访问它。显示之前需要将它格式化,这个时候会设置分辨率和所需要显示格式(format\size\pitch)。唯一一个和硬件无关的基本元素。

3.1.2CRTC

从framebuffer中读取待显示的图像,并按照响应的格式输出给encoder。其承担的主要作用为:
a.配置适合显示器的分辨率,并输出响应的时序。
b.扫描framebuffer送到一个或多个显示器
c.更新framebuffer

3. 1.3Planes

图层,实际输出的图像是多个图层叠加而成的,比如主图层、光标图层。其中有些图层由硬件加速模块生成,每个crtc至少一个plane。plane一共有三种,分别是:DRM_PLANE_TYPE_PRIMARY、DRM_PLANE_TYPE_OVERLAY、DRM_PLANE_TYPE_CURSOR。

3.1.4Encoder:

将一定格式的图像信号(如RGB、YUV等)编码成connector需要的输出信号。不同的电信号有如 DVID、VGA、YPbPr、CVBS、Mipi、eDP 等

3.1.5Connector:

连接显示器的物理接口 (VGA, DVI, FPD-Link, HDMI, DisplayPort, S-Video …) ,负责硬件设备的接入、屏参获取等,如DP、HDMI等.

3.1.6Vblank:

软、硬件同步机制,RGB时序中垂直消影区,软件通常使用硬件VSYNC实现。

3.1.7Property:

任何想设置的参数都可以做成property,通过propery将参数传入kernel内部,是DRM驱动中最灵活的部分。

3.2GEMS

3.2.1Dumb:

只支持连续物理内存,基于kernel中通用CMA API实现,多用于小分辨率简单场景。主要负责一些简单的buffer显示,可以直接使用CPU渲染,GPU不会使用dumb。

3.2.2Prime:

连续、非连续物理内存都支持,基于DMA-BUF机制,可以实现buffer共享,多用于大内存复杂场景。

3.2.3Fence:

buffer同步机制,基于内核dma_fence机制实现,用于防止显示内容出现异步问题。

参考文章

  1. https://blog.csdn.net/zichuanning520/article/details/127047436

http://www.ppmy.cn/news/1568812.html

相关文章

pytorch实现半监督学习

人工智能例子汇总:AI常见的算法和例子-CSDN博客 半监督学习(Semi-Supervised Learning,SSL)结合了有监督学习和无监督学习的特点,通常用于部分数据有标签、部分数据无标签的场景。其主要步骤如下: 1. 数据准备 有标签数据(Labeled Data):数据集的一部分带有真实的类…

MySQL常用数据类型和表的操作

文章目录 (一)常用数据类型1.数值类2.字符串类型3.二进制类型4.日期类型 (二)表的操作1查看指定库中所有表2.创建表3.查看表结构和查看表的创建语句4.修改表5.删除表 (三)总代码 (一)常用数据类型 1.数值类 BIT([M]) 大小:bit M表示每个数的位数,取值范围为1~64,若…

一文大白话讲清楚webpack基本使用——17——Tree Shaking

文章目录 一文大白话讲清楚webpack基本使用——17——Tree Shaking1. 建议按文章顺序从头看,一看到底,豁然开朗2. 啥叫Tree Shaking3. 什么是死代码,怎么来的3. Tree Shaking的流程3.1 标记3.2 利用Terser摇起来 4. 具体使用方式4.1 适用前提…

Redis|前言

文章目录 什么是 Redis?Redis 主流功能与应用 什么是 Redis? Redis,Remote Dictionary Server(远程字典服务器)。Redis 是完全开源的,使用 ANSIC 语言编写,遵守 BSD 协议,是一个高性…

DeepSeek 云端部署,释放无限 AI 潜力!

1.简介 目前,OpenAI、Anthropic、Google 等公司的大型语言模型(LLM)已广泛应用于商业和私人领域。自 ChatGPT 推出以来,与 AI 的对话变得司空见惯,对我而言没有 LLM 几乎无法工作。 国产模型「DeepSeek-R1」的性能与…

2025美赛美国大学生数学建模竞赛A题完整思路分析论文(43页)(含模型、可运行代码和运行结果)

2025美国大学生数学建模竞赛A题完整思路分析论文 目录 摘要 一、问题重述 二、 问题分析 三、模型假设 四、 模型建立与求解 4.1问题1 4.1.1问题1思路分析 4.1.2问题1模型建立 4.1.3问题1样例代码(仅供参考) 4.1.4问题1样例代码运行结果&…

Linux——ext2文件系统(一)

文件系统ext2 文件系统理解磁盘物理结构磁盘图片磁盘具体物理结构磁盘的逻辑结构 掌握CHS和LBA地址一、CHS地址二、LBA地址三、CHS与LBA的比较 引入⽂件系统引入块的概念一、块(Block)的定义二、块的作用三、块与扇区的关系四、块大小的选择 理解分区&am…

【JavaEE】_MVC架构与三层架构

目录 1. MVC架构 2. 三层架构 3. MVC架构与三层架构的对比 3.1 MVC与三层架构的对比 3.2 MVC与三层架构的共性 1. MVC架构 在前文已介绍关于SpringMAC的设计模式,详见下文: 【JavaEE】_Spring Web MVC简介-CSDN博客文章浏览阅读967次,点…