Linux DRM 相关知识

目录

一、X Server 和 X Cilent

二、DRM / KMS 框架

1.‎DRM/KMS 框架专用于管理显示、图形和合成子系统。在其他 Linux 多媒体框架和应用程序的帮助下,通常使用 DRM/KMS 框架

2.‎DRM/KMS 框架提供

‎3.涉及 DRM/KMS 框架的用例示例

三、drm架构

1  画布( FrameBuffer )

2  绘图现场(CRTC)  

3  输出转换器(Encoder )

4 连接器 (Connector )

5 显示面(Planner) 

6 顺序总结

7 资料

 四、参考文章


一、X Server 和 X Cilent

1.X server:负责软硬件的管理,将输入的软硬件事件通过一定协议转发给X client,将输出的图形绘制在屏幕上。包括键盘、鼠标、手写板、显示器 (monitor) 、屏幕分辨率与色彩深度、显卡 (包含驱动程序) 与显示的字体等等,都是 X Server 管理的。

2.X client:每个需要涉及到GUI的App,可以实例化为一个X client,X client主要是响应X server分发下来的事件,通过处理后,将待绘制的图像回传给X Server;

二、DRM / KMS 框架

1.‎DRM/KMS 框架专用于管理显示、图形和合成子系统。在其他 Linux 多媒体框架和应用程序的帮助下,通常使用 DRM/KMS 框架:‎

  • ‎以利用硬件加速来撰写动画内容。‎
  • ‎以控制显示接口和外部显示器,包括其设置(分辨率,频率,多屏幕...‎
  • ‎以在显示面板或 HDMI 输出上显示此动画内容。‎

2.‎DRM/KMS 框架提供:‎

  • ‎内核级接口驱动程序,用于显示、图形和组合内部和外部硬件外设。‎
  • ‎在libdrm/libkms库的帮助下,用户空间级界面可以访问相关的硬件功能,配置和硬件加速。‎

‎3.涉及 DRM/KMS 框架的用例示例:‎

  • ‎在 DSI 或 RGB 面板上显示动画内容。‎
  • ‎将 HDMI 输出配置为给定的分辨率和帧速率。‎
  • ‎在多个可用的显示输出中激活 HDMI 输出。‎
  • ‎创建和管理专用于显示的内存缓冲区,其中包含图形内容(动画、3D 对象、视频等)。‎
  • ‎获取显示计时信息,以有效调整动画内容的速度。‎

三、drm架构

DRM 是linux 下的图形渲染架构(Direct Render Manager) ,具体的说是显卡驱动的一种架构(驱动如何玩?----->   把功能封装成 open/close/ioctl 等标准接口,应用程序调用这些接口来驱动设备)。

作为显卡,最基本的功能就是把用户的绘图输出到显示屏上,DRM 如何去实现呢,先看看DRM 把“这件事”给你概括的几个基本要素:

画布(FrameBuffer) ,  绘图现场(CRTC) , 输出转换器(Encoder) ,  连接器(Connector)  ,  然后就到显示屏了

1  画布( FrameBuffer )

对计算机来说,FrameBuffer 就是一块驱动和应用层都能访问的内存,当然画图之前要有一定的格式化,比方说我可以规定什么样的色彩模式(RGB24 , I420 , YUUV 等等),分辨率是多大,还有啥参数,那就要到绘图现场去看了。

2  绘图现场(CRTC)  

简写翻译过来是阴级摄像管上下文,在 DRM 里 CRTC 就表示显示输出的上下文了,首先 CRTC 内指一个 FrameBuffer 地址,外连一个Encoder。

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

PCLK  HFP HBP  HSW X_RES  VFP VBP  VSW Y_RES

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

一个CRTC 可以连接多个 Encoder  ------>  干啥用? 实现复制屏幕功能。

3  输出转换器(Encoder )

想想 CRT 这种土疙瘩就够复杂了,我们的显卡很牛奔的可以连接各种不同的设备,显然输出需要不同的信号转换器,将内存的像素转换成显示器需要的信号(DVID , VGA , YPbPr , CVBS 等等……)。

4 连接器 (Connector )

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

5 显示面(Planner) 

咦,怎么多出来一个。我也很呐闷,以上的东东不够地干活?----->    其实很多创新往往源于人对现实界的不满足。你又要看文字学习,又要看电影打游戏,还有厉害的可以一边聊天一边看电影。 这里对立出来两个概念,像文字交互这种小范围更新的Graphics 模式,和全幅更新速度奇快的 Video 模式,这两种模式将显卡的使用拉上了两个极端。

于是 Planner 的概念就发挥了很好的作用,它给视频刷新提供了一条绿色通道,偶不和图形搞在一起了,偶是一个新的图层(或overlay),可以叠加在Graphic之上或之下,偶还可以缩放…

文档上说 Planner 也在 FrameBuffer 上,这个没关系,这里我们看出来 CRTC 里要显示的东东应该是一种组合(blending)了。

6 顺序总结:

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 才能工作。 


7 资料:

http://manpages.ubuntu.com/manpages/utopic/man7/drm-kms.7.htmlhttp://manpages.ubuntu.com/manpages/utopic/man7/drm-kms.7.html

http://landley.net/kdocs/htmldocs/drm.htmlhttp://landley.net/kdocs/htmldocs/drm.html 

 DRM Overview (elinux.org)https://elinux.org/images/7/71/Elce11_dae.pdf

 四、参考文章

Linux DRM(六) -- xrandr_Hacker_Albert的博客-CSDN博客_xrandr配置文件

Linux DRM(六) -- EDID_Hacker_Albert的博客-CSDN博客_edid linux

​​​​​​Linux DRM(五) -- Libdrm 库_Hacker_Albert的博客-CSDN博客_libdrm

Linux DRM(四) -- loongson driver_Hacker_Albert的博客-CSDN博客

Linux DRM(三) -- DRM KMS/ Debug_Hacker_Albert的博客-CSDN博客

Linux DRM(二) --Xorg/DRM_Hacker_Albert的博客-CSDN博客_drm x11

Linux DRM(一) -- 硬件信号_Hacker_Albert的博客-CSDN博客

linux drm 架构 之代码分析_狮山飞虎的的博客-CSDN博客

linux drm 架构_狮山飞虎的的博客-CSDN博客

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值