DRM

news/2024/10/13 9:47:12

DRM是Linux目前主流的图形显示框架,相比FB架构,DRM更能适应当前日益更新的显示硬件。

比如FB原生不支持多层合成,不支持VSYNC,不支持DMA-BUF,不支持异步更新,不支持fence机制等等,而这些功能DRM原生都支持。

同时DRM可以统一管理GPU和Display驱动,使得软件架构更为统一,方便管理和维护。

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



libdrm

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

 

KMS

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

 

GEM

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

 

基本元素

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

 

元素 说明
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

 

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)

 

 

https://blog.csdn.net/dahailinan/article/details/111280610

https://cloud.tencent.com/developer/article/2020177

https://download.csdn.net/blog/column/11175480/133602965

 

源码示例

https://github.com/zizimumu/DRM_test/blob/master/modeset-plane-alpha.c

https://gitcode.com/dvdhrm/docs/blob/master/drm-howto/modeset.c?utm_source=csdn_github_accelerator&isLogin=1

https://github.com/zlgopen/awtk-linux-fb/blob/master/awtk-port/lcd_linux/lcd_linux_drm.c

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/26857.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Clock Switch,芯片时钟切换的毛刺是什么,如何消除

背景 芯片运行过程中需要时钟切换时,要考虑到是否会产生glitch,小小的glitch有可能导致电路运行的错误。所以时钟切换时需要特别的处理。 直接使用MUX进行时钟切换或者采用如下电路结构进行时钟切换:assign outclock = (clk1 & select) | (~select & clk0);或 assig…

【计算机网络】通过ensp实验分析二三层数据包转发过程

一、实验准备 需要提前安装好wireshark、virtalbox、WinPcap和模拟工具ensp,具体的安装过程可以自行百度~ 特别提醒一点就是virtalbox和ensp的兼容性问题,我安装的是ensp1.3.00.100版本,该版本不支持virtalbox官网的6和7版本,我这边退回到5版本才正常运行起来。二、网络拓扑…

Redis持久化、主从与哨兵架构详解

参考 图灵课堂 https://zhuanlan.zhihu.com/p/443951927 https://blog.csdn.net/weixin_37548768/article/details/124538778?spm=1001.2014.3001.5502 https://www.runoob.com/redis/redis-transactions.htmlredis支持持久化到磁盘,这样可用进一步保证数据的完整性。 redis持…

异或

这道题目的思路比较好 由于\(1\)到\(n\)的路径很多,我们猜想,任意选一条路径可以通过某种异或运算来得到最优解 证明:假设我们选出的路径不是最优路径,那么对于另一条最优路径,一定可以通过我们选出的路径异或上若干个简单环来达到。举个例子说明假设我们选出的是直线段\(…

rt1052点亮0.96寸spi屏

一,前言 目的是用rgb屏,但是rgb屏硬件还没准备好,所以要先学习下lvgl上位机,但是学习完要烧录到屏中看效果,所以我今天就先点亮spi屏。找了之前stm32时候点亮频的lcd驱动进行的移植,cs我不是gpio控制的,所以注释了2行,看起来无影响。 二,说明 0.96存spi驱动的LCD屏ST7…

【网络通信】Windows搭建RTMP视频流服务器(含推流/拉流详细教程)

RTMP(Real-Time Messaging Protocol)是一种用于实时流媒体传输的网络协议,主要用于传输音频、视频和数据。RTMP最初是由Adobe Systems公司开发的,用于其Flash平台和Adobe Media Server,但随着技术的发展和开源社区的推动,RTMP已经成为了一个广泛使用的流媒体传输协议。今…

基于直方图的图像曝光量分析FPGA实现,包含tb测试文件和MATLAB辅助验证

1.算法运行效果图预览 正常图像: checkb位于f192b和f250b之间多度曝光图像: checkb位于f192b和f250b之外,判决为曝光过度。2.算法运行软件版本 vivado2019.2matlab2022a3.算法理论概述 参考资料如下:主要采用的方法为: 4.部分核心程序`timescale 1ns / 1ps // // Compan…

人机验证 reCaptcha 无法解锁 使用 Gooreplacer 的解决方案

解决方案 浏览器搜索并安装插件 Gooreplacer(参考下方链接),新增设置:匹配模式 google.com/recaptcha 匹配类型 通配符 目标地址 recaptcha.net/recaptcha如下图:并开启,刷新页面,即可。 故障分析及解决思路 常见的人机验证(reCaptcha)网址是 google.com/recaptcha,而…