刚开始学习,记忆不是很好,容易忘,边学边记,阅读的速度会比较慢,看的会比较仔细。
这边主要参考以下博客,前辈们水平很高,写的很详细,详细的知识学习可查看以下链接。
详细请看:
  蜗窝科技: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 subsystem和imtx.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详细讲解可点击链接

思维导图

DRM——学习篇0:概念认识相关推荐

  1. 设计模式学习笔记0——概念

    设计模式概念来自于建筑行业,但却在软件行业发扬光大,各行业思想是"相通"的. 设计模式是设计原则在特定场景下的应用. 设计模式的背后是设计原则. 用设计原则编写的代码往往会变成某个 ...

  2. 鸟哥的Linux私房菜基础学习篇 第0章与第1章的重点探索

    鸟哥的Linux私房菜基础学习篇 第0章与第1章的重点探索 目录 鸟哥的Linux私房菜基础学习篇 第0章与第1章的重点探索 前言 一.计算机概论 1.知识基础 2.知识初阶 3.知识进阶 二.Lin ...

  3. Candence学习篇(4)allegro软件中class 和subclass的概念

    文章目录 前言 一.class 和subclass 是什么? 二.class 和subclass 中涉及到的单词解释 总结 前言 前面我们讲了 Candence学习篇(1) Candence原理图工程 ...

  4. 乐鑫esp8266学习rtos3.0笔记第9篇:整理分享那些我在项目中常用的esp8266 rtos3.0版本的常见驱动,Button按键长短按、PWM平滑调光等。(附带demo)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. Esp8266之 搭建开发环境,开始一个"hello ...

  5. 乐鑫esp8266学习rtos3.0笔记第4篇:带你捋一捋微信公众号 airkiss 配网 esp8266 并绑定设备的过程,移植并成功实现在 esp8266 rtos3.1 sdk。(附带demo)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. Esp8266之 搭建开发环境,开始一个"hello ...

  6. 乐鑫esp8266学习rtos3.0笔记第6篇:esp8266-12模块基于rtos3.1版本ota功能远程空中升级固件,官网之上增加dns域名解析!(附带demo)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. Esp8266之 搭建开发环境,开始一个"hello ...

  7. 深度学习基础(基本概念、优化算法、初始化、正则化等)

    2020-04-25 16:29:09 引言 深度学习目前已成为发展最快.最令人兴奋的机器学习领域之一,许多卓有建树的论文已经发表,而且已有很多高质量的开源深度学习框架可供使用.然而,论文通常非常简明 ...

  8. 重拾强化学习的核心概念_强化学习的核心概念

    重拾强化学习的核心概念 By Hannah Peterson and George Williams (gwilliams@gsitechnology.com) 汉娜·彼得森 ( Hannah Pet ...

  9. weka分类器怎么设置样本类别_【程序喵笔记】小样本学习1.0

    小样本学习 前几天接触小样本学习 Few-Shot Learning,感觉很是有意思.看到Shusen Wang老师的讲解,感觉很棒~持续学习~ 学会学习 Lean to learn 小朋友去动物园, ...

最新文章

  1. JAVA中栈和堆总结
  2. 盛大手机先圈地后挣钱:云+端变现能力仍未清晰
  3. 记录webscraper的使用过程
  4. [75] Making arrangements
  5. Windbg SOS and CLR版本不一致的解决方案
  6. Mac备忘录笔记教学——强大的内置笔记软件
  7. 商户分账交易汇总和商户交易汇总不一致
  8. 亚马逊分类目录_新版亚马逊分类目录v2.4程序源码官方分享下载
  9. java是面向对象还是面向过程_面向对象和面向过程最本质的区别是什么?
  10. git 应用 远程仓库分歧
  11. Atitit webservice之道 艾提拉著 目录 1. 基本说明Web Service 1 2. 基本概念与内部构成 2 2.1. Web services要使用两种技术: XML SOAP
  12. TortoiseGit 使用教程
  13. Java数据结构树实验报告总结_20172302 《Java软件结构与数据结构》实验二:树实验报告...
  14. remove debug symbols to a seperate file
  15. 短链接服务架构设计概览
  16. python简单程序
  17. C语言beep中有什么作用,C++中发声函数Beep用法
  18. oracle将以逗号分隔字符串转多行
  19. STLINK驱动安装不正确问题简单记录
  20. 什么工作工资高?怎么找适合自己的高薪工作?

热门文章

  1. Kafka中HW和LEO增长的原理是什么?流程是怎样的?
  2. 公司抽奖小程序(自定义名单,空格控制滚动、抽奖,可作弊,可满足千人团队, 带可执行程序下载及源代码)
  3. 发声单元的原理/扬声器的工作原理
  4. 修复Edge浏览器无法登录微软账户问题
  5. json和gson傻傻分不清楚
  6. 网吧无盘服务器为什么玩地下城和穿越火线卡其它游戏不卡,为什么网吧的电脑配置更低,玩游戏却更快更爽?...
  7. UnityVR--小程序7--坦克对战
  8. openGL环境贴图
  9. 01熵与热力学重要模型
  10. 【算法】阿里精准推广的核心算法MLR