Linux下DRM的基本概念
文章目录1.前言2.DRM是什么3.DRM的组成3.1 libdrm3.2 KMS3.3 GEM4.基本元素4.1 DRM Framebuffer4.2 CRTC4.3 Encoder1.前言最近在公司的项目代码中看到有关DRM的操作,对里面的DRM内容比较感兴趣,于是上网查找资料,本文对drm的学习进行一个记录2.DRM是什么DRM,英文为Direct Rending Manger,表示直接渲染
文章目录
参考: https://blog.csdn.net/hexiaolong2009/article/details/83720940
https://blog.csdn.net/weixin_40026797/article/details/111058814
1.前言
最近在公司的项目代码中看到有关DRM的操作,对里面的DRM内容比较感兴趣,于是上网查找资料,本文对drm的学习进行一个记录
2.DRM是什么
DRM,英文为Direct Rending Manger,表示直接渲染管理器
,是目前Linux下主流的显示框架,支持FB原生不支持的多图层合成,VSYNC,DMA-BUF,异步更新,支持fence机制,它是为了解决多个程序对video card资源的协同使用问题而产生的,它想用户空间提供一组统一的API,用以访问GPU,同时DRM可以统一管理
3.DRM的组成
DRM从模块上划分可简单分为三部分:libdrm,KMS,GEM
3.1 libdrm
对底层的接口进行封装,并且向上层提供通用的API接口,主要是对各种ioctl
接口进行封装。应用层可以直接使用libdrm的接口来进行图像显示
与图像处理
的功能
3.2 KMS
英文名为Kernel Mode setting
,直译为模式设置
,主要做两件事情:更新画面与设置显示参数
更新画面::显示buffer的切换,多图层的合成方式,以及每一个图层的显示位置
设置显示参数::包括分辨率,刷新率,电源状态(休眠唤醒)等。
3.3 GEM
Graphic Execution Manager,主要负责显示buffer的分配与释放
4.基本元素
DRM框架涉及到的元素大致如下:
KMS:CRTC,ENCODER,CONNECTOR,PLANE,FB,VBLANK,property
GEM:DUMB、PRIME、fence
4.1 DRM Framebuffer
Framebuffer,单个图层的显示内容,唯一一个和硬件无关的基本元素,它是一块内存区域,可以理解为一块画布,驱动和应用层都可以访问这块内存,绘制前需要设置它的色彩格式(如YUV,RGB等)和画布的大小
4.2 CRTC
阴极管的上下文,简单来说是显示输出的上下文,对显示buffer进行扫描,并产生时序信号的硬件模块,通常指Display Controller,CRTC对内连接Framebuffer
的地址,对外连接Encoder
,扫描了Framebuffer
的内容之后,再叠加Planes
的内容,最后传递给Encoder
4.3 Planes
硬件图层,有的Display硬件支持多层合成显示,但所有的Display Controller至少要有1个plane,与Framebuffer一样是内存地址,比如,在手机上可以一边玩电影一边与别人聊天,此时微信聊天界面叠加在游戏界面上,这是因为两个界面使用了不同的图层,这个时候planes就起了很大的作用,相当于图层叠加,所以CRTC扫描的图像实际上是Framebuffer
与Planes
的结合。
4.3.1 类型
- cursor:光标图层,一般用于pc系统,用于显示鼠标
- overlay:叠加图层,通常用于YUV格式的视频图层
- primary:主要图层,通常用于仅支持RGB格式的简单图层
4.4 Encoder
编码器,将内存中的pixel像素编码(转换为)显示器所需要的信号,将CRTC输出的t画面转换成不同外部设备所需要的信号的模块,如HDMI转换器,DSI Controller,VGA等,Encoder与CRTC之间的交互就是ModeSetting
,包含了色彩模式,以及timing时序
等
4.5 Connector
连接物理显示设备的连接器,如HDMI、FPD-Link,DisplayPort、DSI总线,通常和Encoder驱动绑定在一起,它不是指物理线,connector是一个抽象的数据结构,从Connector中可以得到当前物理连接的输出设备的相关的信息,例如:连接状态,EDID数据,支持的视频模式
更多推荐
所有评论(0)