本帖最后由 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的配置。 总之,一句话,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) 如果需要详细了解DRM相关,请查看https://blog.csdn.net/qq_41709234/article/details/129472180 我们要谈的是应用程序如何写来显示在界面上?这里不得不涉及到LIBDRM,因为它是访问DRM驱动的库,以下我们就简单的介绍下LIBDRM,它又有什么优势和劣势呢? libdrm是一个用户空间库(libraryfor 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/KDEFrameworks:提供了跨平台的高层图形接口,可以大幅简化开发
2. 使用显示服务器协议:
- WaylandProtocol:Wayland替代了传统的X11显示协议,开发者可以使用它的库(如We‑ston或wlroots)进行窗口管理和图形开发,而无需直接作libdrm
- X.OrgServer:如果目标是在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 - 2*4-lane/4*2-lane/ 4+2*2-lane;
- 操作系统的支持,可预装Android13/LINUX 5.15/Ubuntu 22.04;
- 尺寸为146X119MM
AHD-X527产品功能:
|