扫码加入

  • 正文
  • 相关推荐
申请入驻 产业图谱

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

2025/07/22
1825
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

最近公司开发T527的项目,其中涉及到图形界面的选型,而恰好最新的T527 SDK已经改用DRM驱动。以前很多简单的处理器选择的都是Framebuffer驱动。那么DRM驱动和FB驱动有什么区别呢?

一、DRM与Framebuffer

Linux 中的 DRM(Direct Rendering Manager) 驱动和 Framebuffer (fbdev) 驱动是两种不同的图形驱动方式,它们之间有一些区别。

Framebuffer驱动:

-直接控制显卡的帧缓冲区,提供基本的显卡输出功能;

-使用一些内核数据结构和API来管理图形界面,并提供一组接口与用户空间的应用程序进行通信

-相对简单,适合于嵌入式系统或者不需要高性能图形的应用场景。

DRM驱动:

-提供一种分离的图形驱动架构,将硬件驱动程序、内核模块和用户空间驱动程序进行分离;

-支持多个应用程序同时访问显卡,并提供了更丰富的图形功能,例如硬件加速和3D加速;

-提供了一些内核接口,可以让用户空间应用程序与驱动程序进行交互;

-支持多显示器和多GPU的配置。

总之,一句话,DRM是Linux目前主流的图形显示框架,相比FB架构,DRM更能适应当前日益更新的显示硬件。尽管FB退出历史舞台,在DRM 中也并未将其遗弃,而是集合到DRM中,供部分嵌入式设备使用。

二、DRM驱动介绍

概述

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

(1)libdrm(DRM框架在用户空间的Lib)

libdrm是一个用户空间的DRM库,提供了DRM驱动的用户空间接口。用户或应用程序在用户空间调用libdrm提供的库函数, 即可访问到显示的资源,并对显示资源进行管理和使用。

(2)KMS(内核显示模式设置)

KMS属于DRM框架下的一个大模块,主要负责两个功能:显示参数及显示控制。 这两个基本功能可以说是显示驱动必须具备的能力,在DRM框架下, 为了将这两部分适配得符合现代显示设备逻辑,又分出了几部分子模块配合框架(CRTC,ENCODER,CONNECTOR,PLANE,FB,VBLANK,property)。

更新画面:显示buffer的切换,多图层的合成方式,以及每个图层的显示位置。

设置显示参数:包括分辨率、刷新率、电源状态(休眠唤醒)等。

(3)GMS(图形执行管理器)

它提供了一种抽象的显存管理方式(主要负责显示buffer的分配和释放),使用户空间应用程序可以更方便地管理显存,而不需要了解底层硬件的细节。(DUMB、PRIME、fence)

我们要谈的是应用程序如何写来显示在界面上?这里不得不涉及到LIBDRM,因为它是访问DRM驱动的库,以下我们就简单的介绍下LIBDRM,它又有什么优势和劣势呢?

libdrm是一个用户空间库(library for Direct Rendering Manager),它为 Linux内核的DRM(Direct Rendering Manager)子系统提供支持。它对底层接口进行封装,主要是对各种ioctl接口进行封装,向上层提供通用的API接口。用户或应用程序在用户空间调用libdrm提供的库函数,即可访问到显示的资源,并对显示资源进行管理和使用。

如果用户自己写的程序比较简单,可以直接调用libdrm的API来实现画面显示,但是,一般不建议这么操作,主要有以下一些原因:

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的一个上层封装,提供了对OpenGL、Vulkan等高级图形API的支持,适合需要硬件加速的图形开发

-SDL2/Qt/KDE Frameworks:提供了跨平台的高层图形接口,可以大幅简化开发

2.  使用显示服务器协议:

-Wayland Protocol:Wayland替代了传统的X11显示协议,开发者可以使用它的库(如We‑ston或wlroots)进行窗口管理和图形开发,而无需直接作libdrm

-Org Server:如果目标是在X11环境下开发,使用Xlib或EGL作为libdrm的封装

3.  使用GPU专用框架:

Vulkan/DirectX/OpenGL:这些框架提供了跨平台的GPU接口,比直接使用libdrm更高效且更通用

4.  借助现有工具:

使用现有的工具和库(如GBM、EGL、GLFW)进行GPU渲染,避免直接处理DRM设备文件或缓冲区

四、总结

为了能够快速形成产品,我们把从这当中选择两种最优方案,一种是带窗口管理系统的图形界面,例如X11或者wayland。另外一种是不带窗口管理系统的图形界面,例如,QT。接下来我们将分别理顺T527关于带窗口和不带窗口管理的相关图形界面的开发。

在此特别感谢盈鹏飞嵌入式大力支持,他们给我们提供了AHD-X527的主板,后续验证和文档内容都在AHD-X527主板上验证通过,主板技术参数如下:

AHD-X527产品特性:

-采用Allwinner公司Cortex-A55八核A527/T527处理器,运行最高速度为0GHZ(T527最高1.8GHZ);

-支持Mali-G57 MC1 GPU,支持OpenGL ES 2/2.0/1.0,Valkan 1.1,OpenCL 2.0

-支持4K/25fps264视频编码,支持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,分辨率最高5K@60fps(与LVDS复用);

-支持1-4G  Bytes LPDDR4XSDRAM

-支持EMMC 8G-64G大容量电子盘,可启动;

-支持1路USB 3.0;支持3路0 HOST和一路OTG(TYPE-C接口);

-支持2路I2C(其中一路支持掉电唤醒)、2路PWM(应用于背光);

-支持双路千兆以太网;

-支持3G/4G通信;

-支持2路UART(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

相关推荐