drm框架简介

DRM是Linux内核中的显示设备管理架构,旨在解决传统FB架构在多应用访问和高级显示功能上的局限。它支持多图层合成、VSYNC、DMA-BUF和fence机制,通过KMS进行模式设置,并由libdrm提供接口库。GEM负责内存管理。自1999年以来,DRM不断发展,支持更多GPU,并引入AtomicAPI,增强了驱动的管理和性能。

1、 DRM简介(Direct Rendering Manager)

传统linux显示设备驱动开发时,通常使用FB驱动架构,随着显卡性能升级:显示覆盖(菜单层级)、GPU加速、硬件光标,传统FB架构无法很好支持,此外,对于多应用的访问冲突也无法很好控制。在这样的背景下,DRM应用而生。

DRM是linux内核中负责与显卡交互的管理架构,用户空间很方便的利用DRM提供的API,实现3D渲染、视频解码和GPU计算等工作。DRM是DRI(Direct Rendering Infrastructure)框架中的一个部分。

DRI并不是一个软件模块。相反DRI是由一系列的软件模块组成。引入DRI的目的是为了3D图形加速,DRI是一个软件架构,用来协调linux kernel,X windows系统,3D图形硬件以及OpenGL渲染引擎之间的工作。

1.1 DRM发展历史

1999年,Precision Insight公司首次为 XFree86 4.0 Server 开发 DRI 显示框架,用于更好的适配 3DFX 公司显卡,初版DRM代码产出后,接下来的几年时间里,DRM 所支持的显卡列表不断被扩充。

2008年10月,Linux kernel 2.6.27 进行了一次重大的源码重组:DRM 的整套源码被放到了/drivers/gpu/drm/目录下,不同的GPU厂商代码也被放到了各自子目录下。

2014年6月,Atomic API 被添加到Linux 3.16,许多驱动也都转而使用这些新的 API。

2018年,又有10个基于 atomic 框架的 DRM 新增驱动被添加到Linux kernel。

1.2 DRM架构对比FB架构优势

DRM是目前Linux的主流图形显示框架,相比于传统FB架构,DRM允许多个程序同时使用视频硬件资源,管理多个程序的资源请求、访问,综上所述DRM更能适应日益更新的显示硬件,DRM优势主要体现:

DRM原生支持多图层合成,FB原生不支持多层合成。

FB不支持VSYNC、DMA-BUF、异步更新和fence机制,但DRM原生都支持。

DRM统一管理GPU和Display

Linux DRM(Direct Rendering Manager)是 Linux 内核的一部分,提供了一个框架,用于直接控制图形硬件进行渲染操作,而不需要通过用户空间的中间层,有助于提高图形渲染的性能和效率[^1]。 DRM 框架向用户空间应用程序导出多个接口,通常通过相应的 libdrm 封装的函数来使用。此外,驱动程序通过 ioctl 和 sysfs 文件导出特定于设备的接口,供用户空间驱动程序和设备感知应用程序使用。外部接口包括内存映射、上下文管理、DMA 操作、AGP 管理、vblank 控制、fence 管理、内存管理和输出管理等 [^3]。 DRM 框架提供的一系列 IOCTL 行为,绝大部分可分成两类:Graphics Execution Manager (GEM)、Kernel Mode-Setting (KMS) [^2]。 在 Linux 内核版本方面,2.6.26 之后的版本,DRM(DRI kernel 模块)源码存放在 kernel/drivers/gpu/drm 中;在这之前的版本,源码在 kernel/drivers/char/drm 目录中 [^4]。 ### 代码示例 以下是一个简单的使用 libdrm 打开 DRM 设备的示例代码: ```c #include <stdio.h> #include <fcntl.h> #include <xf86drm.h> int main() { int fd; // 打开 DRM 设备 fd = open("/dev/dri/card0", O_RDWR); if (fd < 0) { perror("Failed to open DRM device"); return -1; } // 检查设备是否支持 DRM if (!drmAvailable(fd)) { fprintf(stderr, "DRM is not available on this device\n"); close(fd); return -1; } printf("DRM device opened successfully\n"); // 关闭设备 close(fd); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值