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

由于本人工作中只负责Display驱动,因此分享的DRM学习经验都只局限于Display这一块,对于GPU这一块本人无能为力,如果大家有相关经验分享,还请在留言中通知一声,我会常去浏览你的博客,大家相互学习。

DRM

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

DRM从模块上划分,可以简单分为3部分:libdrmKMSGEM


(图片来自Wiki)

libdrm

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

KMS

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

GEM

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

基本元素

DRM框架涉及到的元素很多,大致如下:
KMS:CRTCENCODERCONNECTORPLANEFBVBLANKproperty
GEM:DUMBPRIMEfence


(图片来源: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机制实现,用于防止显示内容出现异步问题

学习DRM驱动其实就是学习上面各个元素的实现及用法,如果你能掌握这些知识点,那么在编写DRM驱动的时候就能游刃有余。

目录(持续更新中)

本篇博客将作为本人DRM学习教程的目录汇总,后续我会以示例代码的形式和大家分享上述知识点的学习过程,并不断更新目录链接,敬请期待!

  1. 最简单的DRM应用程序 (single-buffer)
  2. 最简单的DRM应用程序 (double-buffer)
  3. 最简单的DRM应用程序 (page-flip)
  4. 最简单的DRM应用程序 (plane-test)
  5. DRM应用程序进阶 (Property)
  6. DRM应用程序进阶 (atomic-crtc)
  7. DRM应用程序进阶 (atomic-plane)
  8. DRM (Direct Rendering Manager) 的发展历史
  9. DRM 驱动程序开发(开篇)
  10. DRM 驱动程序开发(VKMS)
  11. 关于 DRM 中 DUMB 和 PRIME 名字的由来
  12. DRM GEM 驱动程序开发(dumb)
  13. DRM 驱动 mmap 详解:(一)预备知识
  14. DRM 驱动 mmap 详解:(二)CMA Helper
  15. LWN 翻译:Atomic Mode Setting 设计简介(上)
  16. LWN 翻译:Atomic Mode Setting 设计简介(下)
  17. 翻译:Mainline Explicit Fencing

dma-buf 系列:
dma-buf 由浅入深(一) —— 最简单的 dma-buf 驱动程序
dma-buf 由浅入深(二) —— kmap / vmap
dma-buf 由浅入深(三) —— map attachment
dma-buf 由浅入深(四) —— mmap
dma-buf 由浅入深(五) —— File
dma-buf 由浅入深(六) —— begin / end cpu_access
dma-buf 由浅入深(七) —— alloc page 版本
dma-buf 由浅入深(八) —— ION 简化版
LWN 翻译:DMA-BUF cache handling: Off the DMA API map (part 1)
LWN 翻译:DMA-BUF cache handling: Off the DMA API map (part 2)


参考资料

  1. Wiki: Direct Rendering Manager
  2. wowotech: Linux graphic subsystem(2)_DRI介绍
  3. Boris Brezillon: The DRM/KMS subsystem from a newbie’s point of view
  4. 线·飘零 博客园:Linux环境下的图形系统和AMD R600显卡编程(1)
  5. Younix脏羊 CSDN博客:Linux DRM(二)基本概念和特性

DRM(Direct Rendering Manager)学习简介相关推荐

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

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

  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)

    DRM DRM是Linux目前主流的图形显示框架,相比FB架构,DRM更能适应当前日益更新的显示硬件.比如FB原生不支持多层合成,不支持VSYNC,不支持DMA-BUF,不支持异步更新,不支持fenc ...

  4. 迁移学习简介(transfer learning)

    迁移学习简介(transfer learning) https://blog.csdn.net/qq_33414271/article/details/78756366 一.什么是迁移学习? 迁移学习 ...

  5. 【线上直播】深度学习简介与落地实战经验分享

    分享嘉宾: 嘉宾简介: 郑泽宇,知衣科技联合创始人兼CEO,美国Carnegie Mellon University(CMU)硕士,畅销书<TensorFlow:实战Google深度学习框架&g ...

  6. 深度学习简介(一)——卷积神经网络

    本文的主要目的,是简单介绍时下流行的深度学习算法的基础知识,本人也看过许多其他教程,感觉其中大部分讲的还是太过深奥,于是便有了写一篇科普文的想法.博主也是现学现卖,文中如有不当之处,请各位指出,共同进 ...

  7. 强化学习q学习求最值_Q学习简介:强化学习

    强化学习q学习求最值 by ADL 通过ADL Q学习简介:强化学习 (An introduction to Q-Learning: reinforcement learning) This arti ...

  8. 【深度学习系列】——深度学习简介

    这是深度学习系列的第一篇文章,欢迎关注原创公众号 [计算机视觉联盟],第一时间阅读我的原创!回复 [西瓜书手推笔记] 还可获取我的机器学习纯手推笔记! 直达笔记地址:机器学习手推笔记(GitHub地址 ...

  9. 深度学习笔记(1) 深度学习简介

    深度学习笔记(1) 深度学习简介 1. 引言 2. 神经网络 3. 兴起 1. 引言 在机器学习的历史上,一共出现了两种定义: 1956 年,开发了西洋跳棋 AI 程序的 Arthur Samuel ...

最新文章

  1. windows文本缩放影响mfc对话框_PhotoShop创建金属文本提示技巧
  2. 「深度」线下大数据正成为构建精准“用户画像”的最大助力
  3. 【撸码师的读书笔记】 深入理解Java虚拟机——JVM高级特性与最佳实践
  4. html绘制头像原样教程,CSS实例教程:创意CSS3头像展示教程
  5. js加版本号 webpack_webpack脚手架增加版本号
  6. UVA - 1314 Hidden Password(最小表示法)
  7. Android之判断是否有网封装类
  8. 网站是如何跟踪监视你的
  9. 零基础入门│带你理解Kubernetes
  10. c语言中3%3e2%3e1的值,C语言--ch2--数据类型和表达式.ppt
  11. 10个调试和排错的小建议
  12. 优酷路由宝文件服务器,优酷路由宝L1刷breed加刷高恪路由,最新可用包含工具及所有文件2019年10月13...
  13. 基于ssm的航空订票系统
  14. CompoundButton
  15. c语言二级考试南开100,南开100题WORD加答案(二级C语言考试)
  16. C#panel渐变绘制
  17. 云计算与虚拟化是什么关系
  18. 网络工程师发展及待遇--学习
  19. 关于.NET报表中图表控件线条颜色和粗细设置
  20. 全球知名浏览器盘点,跨境电商的你知道吗?

热门文章

  1. 今天的CRM系统,还仅仅是一套营销工具吗?
  2. java中常用的英语单词
  3. 2020年软科中国大学排名
  4. JavaScript - 笔记速记
  5. 台式计算机显卡最高温度多少,显卡温度多少是正常的(电脑的温度多少度才算是正常水平?)...
  6. 一键开关Windows Defender V1.6
  7. 秘支撑双 11 买买买背后的硬核黑科技!
  8. 靶场笔记-covfefe
  9. Android安卓——消息提示
  10. 模拟相机视频输入方案-----模拟转MIPI /DVP方案