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

最近公司开发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驱动介绍

1、概述

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)
image
如果需要详细了解DRM相关,请查看https://blog.csdn.net/qq_41709234/article/details/129472180

我们要谈的是应用程序如何写来显示在界面上?这里不得不涉及到LIBDRM,因为它是访问DRM驱动的库,以下我们就简单的介绍下LIBDRM,它又有什么优势和劣势呢?
libdrm是一个用户空间库(library for Direct Rendering Manager),它为 Linux内核的DRM(Direct Rendering Manager)子系统提供支持。它对底层接口进行封装,主要是对各种ioctl接口进行封装,向上层提供通用的API接口。用户或应用程序在用户空间调用libdrm提供的库函数,即可访问到显示的资源,并对显示资源进行管理和使用。
image
如果用户自己写的程序比较简单,可以直接调用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
  • X.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处理器,运行最高速度为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接口);
  • 支持2路I2C(其中一路支持掉电唤醒)、2路PWM(应用于背光);
  • 支持双路千兆以太网;
  • 支持3G/4G通信;
  • 支持2路UART(TTL)、支持1路RS485、支持双路CAN BUS(2.0B,仅T527支持);
  • 支持MIPI CSI - 24-lane/42-lane/ 4+2*2-lane;
  • 操作系统的支持,可预装Android13/LINUX 5.15/Ubuntu 22.04;
  • 尺寸为146X119MM

AHD-X527产品功能图:

image

posted @ 2025-07-16 16:02  embfly168  阅读(99)  评论(0)    收藏  举报