打印
[ARM入门]

T527_DRM驱动介绍及图形界面选型连载(1)

[复制链接]
1400|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
embfly|  楼主 | 2025-7-16 18:08 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 embfly 于 2025-7-17 09:47 编辑

最近公司开发T527的项目,其中涉及到图形界面的选型,而恰好最新的T527 SDK已经改用DRM驱动。以前很多简单的处理器选择的都是Framebuffer驱动。那么DRM驱动和FB驱动有什么区别呢?
一、DRM与Framebuffer
Linux中的 DRM(Direct Rendering Manager) 驱动和 Framebuffer (fbdev) 驱动是两种不同的图形驱动方式,它们之间有一些区别。
Framebuffer驱动:
l  直接控制显卡的帧缓冲区,提供基本的显卡输出功能;
l  使用一些内核数据结构和API来管理图形界面,并提供一组接口与用户空间的应用程序进行通信;
l  相对简单,适合于嵌入式系统或者不需要高性能图形的应用场景。
DRM驱动:
l  提供一种分离的图形驱动架构,将硬件驱动程序、内核模块和用户空间驱动程序进行分离;
l  支持多个应用程序同时访问显卡,并提供了更丰富的图形功能,例如硬件加速和3D加速;
l  提供了一些内核接口,可以让用户空间应用程序与驱动程序进行交互;
l  支持多显示器和多GPU的配置。
总之,一句话,DRMLinux目前主流的图形显示框架,相比FB架构,DRM更能适应当前日益更新的显示硬件。尽管FB退出历史舞台,在DRM 中也并未将其遗弃,而是集合到DRM中,供部分嵌入式设备使用。
二、DRM驱动介绍
1、概述
DRM从模块上划分,可以简单分为3部分:libdrmKMSGEM
1libdrmDRM框架在用户空间的Lib
libdrm是一个用户空间的DRM库,提供了DRM驱动的用户空间接口。用户或应用程序在用户空间调用libdrm提供的库函数,即可访问到显示的资源,并对显示资源进行管理和使用。
2KMS(内核显示模式设置)
KMS属于DRM框架下的一个大模块,主要负责两个功能:显示参数及显示控制。 这两个基本功能可以说是显示驱动必须具备的能力,在DRM框架下,为了将这两部分适配得符合现代显示设备逻辑,又分出了几部分子模块配合框架(CRTCENCODERCONNECTORPLANEFBVBLANKproperty)。
更新画面:显示buffer的切换,多图层的合成方式,以及每个图层的显示位置。
设置显示参数:包括分辨率、刷新率、电源状态(休眠唤醒)等。
3GMS(图形执行管理器)
它提供了一种抽象的显存管理方式(主要负责显示buffer的分配和释放),使用户空间应用程序可以更方便地管理显存,而不需要了解底层硬件的细节。(DUMBPRIMEfence
如果需要详细了解DRM相关,请查看https://blog.csdn.net/qq_41709234/article/details/129472180
我们要谈的是应用程序如何写来显示在界面上?这里不得不涉及到LIBDRM,因为它是访问DRM驱动的库,以下我们就简单的介绍下LIBDRM,它又有什么优势和劣势呢?
libdrm是一个用户空间库(libraryfor Direct Rendering Manager),它为 Linux内核的DRMDirect Rendering Manager)子系统提供支持。它对底层接口进行封装,主要是对各种ioctl接口进行封装,向上层提供通用的API接口。用户或应用程序在用户空间调用libdrm提供的库函数,即可访问到显示的资源,并对显示资源进行管理和使用。
如果用户自己写的程序比较简单,可以直接调用libdrmAPI来实现画面显示,但是,一般不建议这么操作,主要有以下一些原因:
1. API接口较底层:
  • libdrm直接与DRM驱动交互,需要开发者了解GPU和显示设备的硬件架构,以及DRM内核模块的工作方式
  • 错误处理和资源管理复杂,容易出错,例如需要手动处理显存分配、同步操作等
2. 依赖具体硬件:
  • libdrm的很多功能是针对特定硬件实现的(如libdrm_intel或libdrm_amdgpu,不同GPU的实现差异较大,代码移植性较差)
3. 开发效率低:
  • 使用libdrm开发需要编写大量样板代码,而且直接与内核交互,调试难度较高
  • 没有高级抽象,开发者需要自己管理复杂的资源,如帧缓冲区、显示模式等
4. 更新频繁且兼容性问题:
  • libdrm的API会随内核和硬件需求变化,直接使用可能导致兼容性问题,需要频繁调整代码
5. 高级功能支持
  • libdrm只提供低级功能,没有OpenGL、Vulkan或其他高级图形API的支持
  • 如果需要更高级的图形操作,直接使用libdrm反而会增加复杂性
三:推荐的使用方案
1. 使用高级图形库:
  • Mesa3D:它是libdrm的一个上层封装,提供了对OpenGLVulkan等高级图形API的支持,适合需要硬件加速的图形开发
  • SDL2/Qt/KDEFrameworks:提供了跨平台的高层图形接口,可以大幅简化开发
2. 使用显示服务器协议:

  • WaylandProtocol:Wayland替代了传统的X11显示协议,开发者可以使用它的库(如We‑ston或wlroots)进行窗口管理和图形开发,而无需直接作libdrm
  • X.OrgServer:如果目标是在X11环境下开发,使用Xlib或EGL作为libdrm的封装
3. 使GPU专用框架:
  • Vulkan/DirectX/OpenGL:这些框架提供了跨平台的GPU接口,比直接使用libdrm更高效且更通用
4.借助现有工具:
  • 使用现有的工具和库(如GBMEGLGLFW)进行GPU渲染,避免直接处理DRM设备文件或缓冲区
四:总结
为了能够快速形成产品,我们把从这当中选择两种最优方案,一种是带窗口管理系统的图形界面,例如X11或者wayland。另外一种是不带窗口管理系统的图形界面,例如,QT。接下来我们将分别理顺T527关于带窗口和不带窗口管理的相关图形界面的开发。
在此特别感谢盈鹏飞嵌入式大力支持,他们给我们提供了AHD-X527的主板,后续验证和文档内容都在AHD-X527主板上验证通过,主板技术参数如下:
AHD-X527产品特性:
  • 采用Allwinner公司Cortex-A55八核A527/T527处理器,运行最高速度为2.0GHZ(T527最高1.8GHZ);
  • 支持Mali-G57 MC1 GPU,支持OpenGL ES 3.2/2.0/1.0, Valkan 1.1,OpenCL 2.0
  • 支持4K/25fps H.264视频编码,支持4K/15fps MJPEG编码;
  • 多格式4K/60fps视频解 (H.265,H.264,VC-1, MPEG-1/2/4, VP8) ;
  • 支持双屏异显;支持HDMI 2.0B, 分辨率最高4K@60fps;支持LVDS,分辨率最高1920x1080@60fps;支持MIPI DSI,分辨率最高2.5K@60fps(与LVDS复用);
  • 支持1-4G  Bytes LPDDR4X SDRAM;
  • 支持EMMC 8G-64G大容量电子盘,可启动;
  • 支持1路USB 3.0;支持3路USB2.0 HOST和一路OTG(TYPE-C接口);
  • 支持2I2C(其中一路支持掉电唤醒)2PWM(应用于背光);
  • 支持双路千兆以太网;
  • 支持3G/4G通信;
  • 支持2UART(TTL)、支持1路RS485、支持双路CAN BUS(2.0B,仅T527支持);
  • 支持MIPI CSI - 2*4-lane/4*2-lane/ 4+2*2-lane;
  • 操作系统的支持,可预装Android13/LINUX 5.15/Ubuntu 22.04;
  • 尺寸为146X119MM
AHD-X527产品功能:



使用特权

评论回复

相关帖子

沙发
yangjiaxu| | 2025-7-30 11:53 | 只看该作者
支持,这种连载是非常有意义的,而且现在T527好像很火的样子

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

5

帖子

0

粉丝