DRM——学习篇0:概念认识

2023-11-09

刚开始学习,记忆不是很好,容易忘,边学边记,阅读的速度会比较慢,看的会比较仔细。
这边主要参考以下博客,前辈们水平很高,写的很详细,详细的知识学习可查看以下链接。
详细请看:
  蜗窝科技:http://www.wowotech.net/graphic_subsystem/graphic_subsystem_overview.html
  何小龙CSDN:https://blog.csdn.net/hexiaolong2009/article/details/83720940
  Younix脏羊CSDN:https://blog.csdn.net/dearsq/article/details/78312052
  imtx.me:https://imtx.me/blog/introduce-wayland-2/

概念

  DRM(Direct Rendering Manager)即直接渲染管理器,属于图形子系统(graphic subsystem)之一。故先来了解一下什么是图形子系统?
  图形子系统是Linux系统中较复杂子系统之一。对下,要管理形态、性能各异的显示相关器件。对上,需向应用程序提供易用、友好、强大的图形界面(GUI,Graphical User Interface)。
  又由于硬件设备众多,为方便应用开发,需一个稳定跨平台的API来定义渲染有关的行为和动作,而OpenGL(Open Graphics Library)就是这类API的一种。对上,屏蔽硬件细节,为应用程序提供相对稳定的、平台无关的3D图像处理API(当然,也可以是2D)。对下,指引硬件相关的驱动软件,实现3D图像处理相关的功能。
  作为一名初学者,其实我对渲染这个词一直不太清楚,所以搜索了一下(可看知乎-渲染),简单理解就是绘制,最终结果就是形成图片(将内存中的图像数据形成图片)
  硬件加速(Hardware acceleration):通过特定功能硬件模块处理CPU不擅长的事务,对应的硬件模块称做硬件加速模块。如:计算机中2D渲染一般由CPU完成(也可由专门硬件),但一般3D渲染由显卡(由GPU、显存、电路板,BIOS固件组成)负责。
  再了解一下窗口系统(Windowing system),是GUI的一种(当前计算机设备、智能设备广泛使用的一种),以WIMP (windows、icons、menus、pointer) 的形式,提供人机交互接口。Linux系统中有很多窗口系统的实现,如X Window System、Wayland、Android SurfaceFlinger等,虽形态各异,但思路大致相同。

X Windows System

  从上知 X Window System(常称X11)就是窗口系统的一种实现,只提供实现GUI环境的基本框架定义protocol、基本的图形单元(点、线、面等等)、鼠标键盘等输入设备交互等等),而其他由第三方应用提供(即扩展),主要包括:
    窗口管理器(window manager):控制应用程序窗口(application windows)的布局和外观,使每个应用程序窗口尽量以统一、一致的方式呈现给用户,如最简单的窗口管理程序–twm(Tab Window Manager)
    GUI工具集(GUI widget toolkit):Windowing system之上的进一步的封装,封装出一些更为便利的GUI接口,方便应用程序使用,如Microwindows、GTK+、QT等等
    桌面环境(desktop environment):应用程序级别的封装,通过提供一系列界面一致、操作方式一致的应用程序,使系统以更为友好的方式向用户提供服务。如:GNOME、KDE等等。
  具体扩展实例:
     - 要多头显示支持,这个是由"Xinerama"扩展实现的;
     - 要有多媒体视频回放的支持,这个是由"X Video"扩展实现的;
     - OpenGL的3D支持,则是通过"GL"扩展来实现的;
     - Compiz那样的合成桌面特效是怎么弄的?没错,还需要一个新的扩展,它便是:“Composite”;
     - 甚至Keyboard的支持,都是通过"X Keyboard Extension"(也就是"XKB")的!
  使用 client-server架构,感觉有点像网络里面的请求者(客户端)-响应者(服务器),它们之间通过一定的通信协议进行交互client:发送绘图请求,server:响应并处理请求(管理所有输入设备,以及用于输出的显示设备。如:应用程序作为client,去请求server后,server会响应将在应用程序的窗口上绘制自己的GUI。(不清楚理解的对不对)
  来看下X Window系统的架构图:
在这里插入图片描述
     - X Client:图形应用程序,如Firefox、Pidgin等;
     - X Server:你看不见的控制中心;
     - Compositor:合成桌面系统,如Compiz;
     - Kernel/KMS/evdev:这便是Linux Kernel,后面会提到KMS技术了,其中还有一项evdev,是管理输入设备的。
  若想从具体的应用场景了解,可点击链接查看原文imtx.me里面有用浏览器进行详细的描述,而这个过程可描述为:X Client <-> X Server <-> Compositor这三者请求渲染的过程,不是很高效。

Linux系统中图形有关的软件层次

  经过以上概念的阐述可得到Linux系统中图形有关的软件层次(图形子系统),具体如下:在这里插入图片描述
以上内容来自蜗窝科技—Linux graphic subsystemimtx.me—揭开Wayland的面纱(一):Wayland应运而生详细讲解可点击链接
  精简的基本框架,与时俱进只需通过扩展对新技术的支持方便维护,这样的设计非常好,但是C/S的网络构架却备受质疑。

Wayland

  A Simple Display Server(一个简单的"显示服务器"),以 Compositor/Client 的结构取而代之,还是直接看原文:imtx.me—揭开Wayland的面纱(二):Wayland应运而生

DRI

  DRI(Direct Render Infrastructure)框架:主要包含两个方面:
    一、DRM(Direct Rendering Manager)(在kernel中实现,负责管理显卡和相应的图形存储器[graphics memory]):主要功能有二:
      ①统一管理、调度多个应用程序向显卡发送的命令请求,可以类比为管理CPU资源的进程管理(process management)模块。
      ②统一管理显示有关的memory(memory可以是GPU专用的,也可以是system ram划给GPU的,后一种方法在嵌入式系统比较常用),该功能由GEM(Graphics Execution Manager)模块实现
    二、KMS(Kernel Mode Setting):它要实现的功能较简单,即:显示模式(display mode)的设置,包括屏幕分辨率(resolution)、颜色深的(color depth)、屏幕刷新率(refresh rate)等等。

  应用程序想将自身UI界面呈现给用户,需两步骤
    ①将UI绘制出来并以一定格式保存在buffer中。(这过程就是常说的“Rendering”)。
    ②将buffer中的UI数据显示在显示设备上。(这过程一般称作“送显”)。
  而操作系统中,应用程序不应该直接访问硬件,通常是:Application<---->Service<---->Driver<---->Hardware。(原因有二:安全性和共享硬件资源,但走的路太多了就显得有些低效)但X server+3D出现后(前面已介绍过,管理所有输入设备,以及用于输出的显示设备),框架变成:
在这里插入图片描述
  但对于需要高性能的图形设备来说,应用程序直接访问硬件才能实现性能最优,故就给出了一个能直接访问硬件(DRI)的框架:
在这里插入图片描述
  上面好像讲的都是Rendering有关的内容,那送显呢?还是由display server统一处理比较好,因为显示设备是有限的,多个应用程序的多个界面都要争取这有限的资源,server会统一管理、叠加并显示到屏幕上。而这里叠加的过程,通常称作合成(Compositor)。
以上内容来自蜗窝科技—Linux graphic subsystem2详细讲解可点击链接

DRM

  Linux目前主流的图形显示框架,相比FB架构,DRM更能适应当前日益更新的显示硬件.从模块上划分可分为三部分(libdrm、KMS、GEM):
    一、libdrm:对底层接口进行封装,向上层提供通用的API接口,主要是对各种IOCTL接口进行封装。
    二、KMS(Kernel Mode Setting):负责更新画面和设置显示参数。
    涉及到的元素有:CRTCENCODERCONNECTORPLANEFBVBLANKproperty
      更新画面:显示buffer的切换,多图层的合成方式,以及每个图层的显示位置。
      设置显示参数:包括分辨率、刷新率、电源状态(休眠唤醒)等
    三、GEM(Graphic Execution Manager):负责显示buffer的分配和释放,也是GPU唯一用到DRM的地方
    涉及到的元素有:DUMBPRIMEfence
在这里插入图片描述

DRM Framebuffer

  它是一块内存区域,可以理解为一块画布,驱动和应用层都能访问它。绘制前需要将它格式化,设定绘制的色彩模式(例如RGB24,YUV 等)和画布的大小(分辨率)。

CRTC

  阴极摄像管上下文。这个看名字很很难懂,但简单的来说他就是显示输出的上下文,可以理解为扫描仪。CRTC对内连接 Framebuffer 地址,对外连接 Encoder,会扫描 Framebuffer 上的内容,叠加上 Planes 的内容,最后传给Encoder。

Planes

  平面。它和 Framebuffer 一样是内存地址。它的作用是干什么呢?打个比方,在电脑上,一边打字聊微信一边看电影,这里对立出来两个概念,打字是文字交互,是小范围更新的 Graphics 模式;看电影是全幅高速更新的 Video 模式,这两种模式将显卡的使用拉上了两个极端。
  这时Planes就发挥了很好的作用,它给 Video 刷新提供了高速通道,使 Video 单独为一个图层,可以叠加在 Graphic 上或之下,并具有缩放等功能。
  Planes 是可以有多个的,相当于图层叠加,因此扫描仪(CRTC)扫描的图像实际上往往是 Framebuffer 和 Planes 的组合(Blending)。

Encoder

  编码器。它的作用就是将内存的 pixel 像素编码(转换)为显示器所需要的信号。简单理解就是,如果需要将画面显示到不同的设备(Display Device)上,需要将画面转化为不同的电信号,例如 DVID、VGA、YPbPr、CVBS、Mipi、eDP 等。
  Encoder 和 CRTC 之间的交互就是我们所说的 ModeSetting,其中包含了前面提到的色彩模式、还有时序(Timing)等。

Connector

  连接器。它常常对应于物理连接器 (例如 VGA, DVI, FPD-Link, HDMI, DisplayPort, S-Video等) ,它不是指物理线,在 DRM中,Connector 是一个抽象的数据结构,代表连接的显示设备,从Connector中可以得到当前物理连接的输出设备相关的信息 ,例如,连接状态,EDID数据,DPMS状态、支持的视频模式等。
以上参考天上下橙雨CSDN—Linux DRM基本概念与使用示例(C语言)
在这里插入图片描述
在这里插入图片描述
以上内容来自何小龙CSDN详细讲解可点击链接

思维导图

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DRM——学习篇0:概念认识 的相关文章

随机推荐

  • Stall Reservations POJ - 3190

    这道题 是学长给我们布置的学习用的题目 重在给我们讲解了什么是优先队列以及其对应的贪心问题 好了 先送上 中文翻译过的题意 手动 滑稽 Oh those picky N 1 lt N lt 50 000 cows They are so p
  • Armbian5.9.0如何安装docker及部署可视化portainer

    安装 docker 通过 ssh 进去 Armbian 系统后 输入下面代码 按提示输入y 等待安装完成即可 apt install docker io 如何查看 docker 是否安装成果 输入命令 docker 可出现docker帮助内
  • MySQL常用命令用法总结

    原文 http www jb51 net article 22110 htm 一 启动与退出 1 进入MySQL 启动MySQL Command Line Client MySQL的DOS界面 直接输入安装时的密码即可 此时的提示符是 my
  • Win 10系统无法连接蓝牙耳机问题

    问题描述 本人刚入手的笔记本电脑 设置里面也有 蓝牙 的开关 由于处于实验室的环境不能开外放 有线耳机显得很不舒服 于是本人兴奋地拿起平时用的蓝牙耳机 想和电脑连起来 但是打开蓝牙开关之后 遇到了下面的情况 打开添加完设备之后 不仅仅是本人
  • springboot2.0学习笔记 自定义JSON序列化程序和反序列化器

    如果使用jackson序列化和反序列化json数据 则可能需要编写 自己JsonSerializer和JsonDeserializer的类 Spring提供了一个替代方案 JsonComponent创建注释 直接注册spring bean容
  • SecureCRT 64位 破解版v8.1.4

    http www xue51 com soft 1510 html xzdz securecrt 破解版是一款支持SSH1和SSH2的终端仿真程序 这个程序能够在windows系统中登陆UNIX或Linux的服务器主机并且还能进行管理设置
  • 全网最细的SpringBoot3系列教程

    1 开发第个Spring Boot应用 创建POM 因为是3 0 0 M1版本 是程碑版本 不是正式发布版 需要从Spring提的Maven仓库中才能下载到3 0 0 M1版本的依赖包 需要在pom xml件中单独指定仓库地址 如果使的是正
  • 安卓真机调试安装失败Session ‘app‘: Installation did not succeed. The application could not be installed: IN:

    Session app Installation did not succeed The application could not be installed INSTALL FAILED TEST ONLY 解决方案 在gradle pr
  • 自定义Looper/Handler模型 线程wait/notify版本 非poll版本

    循环 public static class Looper final static ThreadLocal
  • PS证件照换底色

    原图 1 本教程采用photoshop CS5制作 其它版本基本通用 先在PS中打开原图 如下图所示 2 右键单击背景图层 在弹出的菜单中选择 复制图层 如下图所示 3 接着会弹出 复制图层 对话框 直接按确定即可 如下图所示 4 单击选中
  • pymysql的使用

    pymysql是从Python连接到MySQL数据库服务器的接口 其官方文档为 https pymysql readthedocs io en latest 安装 pip install pymysql 对于数据库的操作 我们一般是这样的操
  • 正在开发应用于Maxthon、TT等多页面浏览器的页面模式

    经过大量的用户调查 我们发现 有不少朋友使用了Maxthon 腾讯TT 世界之窗等基于IE的多页面浏览器使用WEBCHAT 而这种模式下弹出窗口将变成一个新页面 用起来不方便
  • 如何查看支付宝旗下的天弘基金一共有多少只?分别是什么?

    如何查看支付宝旗下的天弘基金一共有多少只 分别是什么 2020年 股市风格突变 相对股市个股的跌宕起伏 基金的收益可谓一枝独秀 下面我们将对基金进行研究 看看我们可以获取数据能否到什么程度 利用tushare的数据接口就可以获取基金的名称
  • 排序类算法

    文章目录 利用vector进行排序 数字类元素 字符串类元素 利用其他STL容器排序 map set priority queue 利用vector进行排序 数字类元素 每个元素一般包含多个条件 利用lambda编写特定排序条件 用sort
  • 转:Ogre TerrainGroup地形赏析

    转 Ogre TerrainGroup地形赏析 1 1 参考 http www ogre3d org tikiwiki tiki index php page Ogre Terrain System http www ogre3d org
  • VS2017找不到QT头文件

    一 我的电脑右键属性 高级系统设置 环境变量 增加环境变量Qt INCLUDEPATH 值为QT的头文件目录 二 重启VS 发现波纹线不见了 证明设置环境变量后VS能识别到QT头文件了 原理是 vs导入qt项目附加包含目录继承值有Qt IN
  • (202301)pytorch图像分类全流程实战Task6:可解释性分析、显著性分析

    Task6 可解释性分析 显著性分析 对B站up同济子豪兄的图像分类系列的学习 大佬的完整代码在GitHub开源 2022年人工智能依旧飞速发展 从传统机器学习模型到如今以 炼丹 为主的深度神经网络 代表着模型拟合度与模型可解释性各自的发展
  • MySQL学习(十六):数据类型之日期与时间类型

    数据类型之日期与时间类型 日期与时间是重要的信息 在我们的系统中 几乎所有的数据表都用得到 原因是客户需要知道数据的时间标签 从而进行数据查询 统计和处理 类型 名称 字节 日期格式 最小值 最大值 YEAR 年 1 YYYY或YY 190
  • Linux系统管理(六)高级存储管理

    目录 一 逻辑卷 二 lvm逻辑管理器 lvm建立 lvm拉伸 lvm缩减 lvm删除 lvm快照 三 vdo虚拟数据优化器 vdo建立 使用vdo设备 测试vdo性能 设置vdo开机自启动 vdo设备的删除 一 逻辑卷 pv 物理卷 被处
  • DRM——学习篇0:概念认识

    刚开始学习 记忆不是很好 容易忘 边学边记 阅读的速度会比较慢 看的会比较仔细 这边主要参考以下博客 前辈们水平很高 写的很详细 详细的知识学习可查看以下链接 详细请看 蜗窝科技 http www wowotech net graphic