DRM

DRM是Linux目前主流的图形显示框架,相比FB架构,DRM更能适应当前日益更新的显示硬件。比如FB原生不支持多层合成,不支持VSYNC,不支持DMA-BUF,不支持异步更新,不支持fence机制等等,而这些功能DRM原生都支持。同时DRM可以统一管理GPU和Display驱动,使得软件架构更为统一,方便管理和维护。

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


(图片来自Wiki)
libdrm

对底层接口进行封装,向上层提供通用的API接口,主要是对各种IOCTL接口进行封装。
KMS

Kernel Mode Setting,所谓Mode setting,其实说白了就两件事:更新画面和设置显示参数。
更新画面:显示buffer的切换,多图层的合成方式,以及每个图层的显示位置。
设置显示参数:包括分辨率、刷新率、电源状态(休眠唤醒)等。
GEM

Graphic Execution Manager,主要负责显示buffer的分配和释放,也是GPU唯一用到DRM的地方。
基本元素

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


(图片来源:The DRM/KMS subsystem from a newbie’s point of view)
元素     说明
CRTC     对显示buffer进行扫描,并产生时序信号的硬件模块,通常指Display Controller
ENCODER     负责将CRTC输出的timing时序转换成外部设备所需要的信号的模块,如HDMI转换器或DSI Controller
CONNECTOR     连接物理显示设备的连接器,如HDMI、DisplayPort、DSI总线,通常和Encoder驱动绑定在一起
PLANE     硬件图层,有的Display硬件支持多层合成显示,但所有的Display Controller至少要有1个plane
FB     Framebuffer,单个图层的显示内容,唯一一个和硬件无关的基本元素
VBLANK     软件和硬件的同步机制,RGB时序中的垂直消影区,软件通常使用硬件VSYNC来实现
property     任何你想设置的参数,都可以做成property,是DRM驱动中最灵活、最方便的Mode setting机制
    
DUMB     只支持连续物理内存,基于kernel中通用CMA API实现,多用于小分辨率简单场景
PRIME     连续、非连续物理内存都支持,基于DMA-BUF机制,可以实现buffer共享,多用于大内存复杂场景
fence     buffer同步机制,基于内核dma_fence机制实现,用于防止显示内容出现异步问题

Linux 的显示驱动drm 的架构,在这里按一定顺序回顾一下:

1 我把显示器连到显卡的DVI输出口, 这个连接抽象成 Connector

2    在 DVI 的 Connector 上驱动会分配 DVI 信号的 Encoder ,  如果没分配, connector 资源上会找到 所有可用的 encoders

3    encoder 是为图像扫描现场 crtc 服务的, 驱动可能会给encoder 分配crtc , 或者从 encoder 的 possible_crtc 上能找到可用的

4    crtc 扫描现场要配置显示图像的物理内存区 fb

5    fb -> crtc -> encoder - > connector 这种关系绑定之后,绘图工作已经开始, 你可以在fb 上任意写画,然后立马得到显示!

6 然而为了避免图像撕裂,可以建立多 fb (缓冲) 通过 pageFlip 操作来刷新画图。

7 当然还有专为video 刷新用的plane , plane 也要绑定到 crtc  才能工作。

DRM(Direct Rendering Manager)相关推荐

  1. DRM(Direct Rendering Manager)学习简介

    学习DRM一年多了,由于该架构较为复杂,代码量较多,且国内参考文献较少,初学者学习起来较为困难.因此决定将自己学习的经验总结分享给大家,希望对正在学习DRM的同学有所帮助,同时交流经验. 由于本人工作 ...

  2. Direct Rendering Manager - 基本概念

    Direct Rendering Manager 基本概念 1 概述 2 DRM 2.1 libdrm 2.2 KMS(Kernel Mode Setting) 2.3 GEM(Graphics Ex ...

  3. DRM (Direct Rendering Manager) 的发展历史

    !!!声明!!! 本文章转自:何小龙 链接:https://blog.csdn.net/hexiaolong2009/article/details/88075520 转载只是为了学习备份. 前言 了 ...

  4. 磁盘管理之逻辑卷管理(Logical Volume Manager)

    LVM是逻辑卷管理(Logical Volume Manager)的简称,它是建立在物理存储设备之上的一个抽象层,允许你生成逻辑存储卷,与直接使用物理存储在管理上相比,提供了更好灵活性. LVM将存储 ...

  5. idm下载器(Internet Download Manager)

    idm下载器(Internet Download Manager) 1. 下载 到官网https://www.internetdownloadmanager.com/上下载即可 2. 安装 下载之后, ...

  6. LVM(Logical Volume Manager)逻辑卷管理

    一:LVM简介 LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管 ...

  7. 一款性能比IDM(Internet Download Manager)下载器强大,且免费的下载器NDM(Neat Download Manager)

    1.最近发现一款新的免费下载器NDM,性能优于IDM,大家可以尝试用一下,下载链接如下: Neat Download Manager for Mac and Windows (Free Interne ...

  8. Redis图形化管理工具(Redis Desktop Manager)

    文章目录 一.背景: 二.下载链接: 三.操作方法: 3.1.新建连接: 3.2.功能项: 3.3.查看redis失效时间: 3.4.命令行操作模式: 一.背景: 随着业务的突飞猛进,查询业务如果还是 ...

  9. NVM(node version manager)node版本管理工具

    NVM(node version manager)node版本切换工具 nvm是nodejs的版本管理工具,可以快速切换更新nodejs版本,windows系统使用nvm-windows. 1.NVM ...

最新文章

  1. 剑指offer:面试题20. 表示数值的字符串
  2. python循环语句-python----循环语句及循环控制语句
  3. python 数据分析学什么-如何在业余时学数据分析?
  4. Restoring Road Network(弗洛伊德算法的使用)
  5. linux 文件系统原理 书,发个关于文件系统的书《Linux文件系统剖析》
  6. html表单代码例子_关于React的这些细节,你知道吗?-表单
  7. 切换不同的数据状态布局,包含加载中、空数据和出错状态,可自定义状态布局
  8. 背叛乔布斯,库克做对了
  9. odoo10参考系列--网络控制器(Web Controllers)
  10. mysql分组查询学生平均年龄_mysql练习题
  11. 弱性能穿戴设备App化之Lua For STM32
  12. 计算机网络信息安全参考文献,计算机网络信息安全学论文参考文献 计算机网络信息安全专著类参考文献有哪些...
  13. 如何简单的将中文翻译为英文
  14. 《刻意练习》读书分享
  15. ai人工智能书籍_您应该阅读的有关AI的精彩书籍
  16. 上汽集团 java_【上汽集团工资】工程师待遇-看准网
  17. c语言知识地图,【程序设计论文】C语言程序设计翻转课堂研究(共3546字)
  18. docker-部署lnmp
  19. java jdk 是什么_java中的jdk是做什么用的?
  20. 单片机结构和原理讲解!

热门文章

  1. Cordova 编译打包 gradle下载慢的曲线救国解决办法
  2. Windows电脑好用软件推荐
  3. 文件异步上传使用虚拟滚动el-table-virtual-scroll加载数据
  4. 张高兴的 Xamarin.Android 学习笔记:(四)常用控件
  5. Conditional GAN
  6. 如何用Python解决《戴森球计划》中的生产规划问题
  7. python的loc函数_如何在pandas中使用loc、iloc函数进行数据索引(入门篇)
  8. 对于长期作业来说,从容方能持久
  9. 灾难恢复全攻略:从定级、规划到实施
  10. html5用户自定义错误信息,HTML_HTML5设计网页时应该避免的一些小错误,在这篇文章中,我将给大家分 - phpStudy...