linux内核radeon gpu源码解析2 —— 什么是drm

13 篇文章 17 订阅

参考:

DRM(Direct Rendering Manager)学习简介_yebanguhe的博客-CSDN博客

DRM的基本概念_yangchangwen83的博客-CSDN博客_drmmodesetplane

DRM

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

DRM是一个内核级的设备驱动,既可以编译到内核中也可以作为标准模块进行加载。DRM最初是在FreeBSD中出现的,后来被移植到Linux系统中,并成为Linux系统的标准部分。

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

libdrm

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

KMS

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

包含元素:FB,CRTC,ENCODER,CONNECTOR,PLANE,VBLANK,property。

GEM

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

包含元素:DUMB,PRIME,fence。

1. FB(FrameBuffer)(画布,帧缓冲/帧缓存)

对计算机来说,FrameBuffer 就是一块驱动和应用层都能访问的内存,是唯一一个和硬件无关的基本元素。当然画图之前要有一定的格式化,比方说我可以规定什么样的色彩模式(RGB24 , I420 , YUUV 等等),分辨率是多大等等。

2. CRTC(绘图现场)

简写翻译过来是阴级摄像管上下文,在DRM 里 CRTC 就表示显示输出的上下文了。对显示buffer进行扫描,并产生时序信号的硬件模块,通常指Display Controller。首先 CRTC 内指一个 FrameBuffer 地址,外连一个Encoder。

它们俩之间如何沟通?这就是显示模式(ModeSet)要做的事情。ModeSet 包括了像前面提到的色彩模式,还有说显示的时序(timings , ModeLines 等都代表了这个意思)等,通常时序可以按以下来表达: 

PCLK       HFP              HBP            HSWX_RES                        VFP             VBP             VSWY_RES

像素时钟  水平前回扫   水平后回扫  水平同步头  水平有效长度  垂直前回扫  垂直后回扫  垂直同步头  垂直有效长度

一个CRTC 可以连接多个 Encoder ,实现复制屏幕功能。

3. Encoder(输出转换器)

负责将CRTC输出的timing时序转换成外部设备所需要的信号的模块,如HDMI转换器或DSI Controller。

显卡可以连接各种不同的设备,显然输出需要不同的信号转换器,将内存的像素转换成显示器需要的信号(DVID , VGA , YPbPr , CVBS 等等……)。

4. Connector(连接器 )

连接物理显示设备的连接器,如HDMI、DisplayPort、DSI总线,通常和Encoder驱动绑定在一起。

不是指物理线,回到DRM,这是一个抽象的数据结构 ,代表连接的显示设备,从这里我们可以得到设备的EDID、DPMS连接状态等。

5. PLANE(硬件图层)

有的Display硬件支持多层合成显示,但所有的Display Controller至少要有1个plane。

6. VBLANK (垂直消隐,场消隐)

软件和硬件的同步机制,RGB时序中的垂直消影区,软件通常使用硬件VSYNC来实现。

7. property (属性)

任何你想设置的参数,都可以做成property,是DRM驱动中最灵活、最方便的Mode setting机制。

8. DUMB

只支持连续物理内存,基于kernel中通用CMA API实现,多用于小分辨率简单场景。

9. PRIME

连续、非连续物理内存都支持,基于DMA-BUF机制,可以实现buffer共享,多用于大内存复杂场景。

10. fence

buffer同步机制,基于内核dma_fence机制实现,用于防止显示内容出现异步问题。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝天居士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值