1 Linux内核4.14版本——drm框架分析——drm简介

目录
1. DRM简介()
1.1DRM发展历史
1.2DRM架构对比FB架构优势
1.3 DRM图形显示框架
1.4DRM图形显示框架涉及元素
1.4.1DRM
1.4.2CRTC
1.4.
1.4.
1.4.
1.4.6 Panel
1.4.
1.4.
1.4.9小结
2. DRM驱动框架
2.1 DRM驱动对象介绍
2.2DRM抽象硬件如何关联DRM
3.DRM简单示例
3.1 打开DRM设备文件
3.2获取显卡资源句柄
3.3获取
3.4创建
3.5设置Crtc模式
3.6资源清理工作
4.安装
5.本章小结
6. 参考文件
1. DRM简介()
传统linux显示设备驱动开发时,通常使用FB驱动架构,随着显卡性能升级:显示覆盖(菜单层级)、GPU加速、硬件光标,传统FB架构无法很好支持,此外,对于多应用的访问冲突也无法很好控制 。在这样的背景下,DRM应用而生 。
DRM是linux内核中负责与显卡交互的管理架构,用户空间很方便的利用DRM提供的API,实现3D渲染、视频解码和GPU计算等工作 。
1.1DRM发展历史
(1)1999年,公司首次为4.0开发 DRI 显示框架,用于更好的适配 3DFX 公司显卡,初版DRM代码产出后,接下来的几年时间里,DRM 所支持的显卡列表不断被扩充 。
(2)2008年10月,Linux2.6.27 进行了一次重大的源码重组:DRM 的整套源码被放到了//gpu/drm/目录下,不同的GPU厂商代码也被放到了各自子目录下 。
(3)2014年6月,API 被添加到Linux 3.16,许多驱动也都转而使用这些新的 API 。
(4)2018年,又有10个基于框架的 DRM 新增驱动被添加到Linux。
1.2DRM架构对比FB架构优势
DRM是目前Linux的主流图形显示框架,相比于传统FB架构,DRM允许多个程序同时使用视频硬件资源,管理多个程序的资源请求、访问,综上所述DRM更能适应日益更新的显示硬件,DRM优势主要体现:
(1)DRM原生支持多图层合成,FB原生不支持多层合成 。
(2)FB不支持VSYNC、DMA-BUF、异步更新和fence机制,但DRM原生都支持 。
(3)DRM统一管理GPU和驱动,让软件升级、维护和管理更加方便 。
1.3 DRM图形显示框架
DRM检测到的每个GPU都作为DRM设备,并为之创建一个设备文件/dev/dri/cardX与之连接,从整体架构上来看主要分为3个主要部分:
(1) (接口库)
对底层接口进行封装,向上层提供通用的API接口,主要是对各种IOCTL接口进行封装,便于重用与代码共享 。
(2)KMS ( Mode )
正常工作时,需要设置显卡或者图形适配器的模式,主要体现在以下两个方面:
更新画面:显示的切换,多图层的合成方式控制,以及每个图层的显示位置 。
设置显示参数:包括分辨率、刷新率、电源状态(休眠唤醒)等 。
(3)GEM ()
提供内存管理方法,主要负责显示的分配和释放 。

1  Linux内核4.14版本——drm框架分析——drm简介

文章插图
DRM图形显示框架总览
1.4DRM图形显示框架涉及元素
本章节介绍DRM框架中的一些重点模块的功能与在显示链路中的作用,下图为APP调用DRM到屏幕显示的流程框图 。
下表对DRM中KMS和GEM两个模型的不同组件进行概述性说明,辅以高通平台代码层级的对应关系说明,以加深架构与流程之间的对应联系 。
各部分说明:
1.4.1DRM
是一块内存区域,可以理解为一块画布,驱动和应用层都能访问它 。绘制前需要将它格式化,设定绘制的色彩模式(例如RGB24,YUV 等)和画布的大小(分辨率),不负责显存的分配释放 。
1.4.2CRTC
阴极摄像管上下文(显示控制器),也可以理解为扫描仪(对显示进行扫描,并产生时序信号(RGB )的硬件模块) 。CRTC对内连接地址,对外连接 ,会扫描上的内容,叠加上的内容,最后传给 。在平台是 SOC 内部 VOP(部分文档也称为 LCDC)模块的抽象 。如图: