最近公司开发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)



如果需要详细了解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提供的库函数,即可访问到显示的资源,并对显示资源进行管理和使用。



如果用户自己写的程序比较简单,可以直接调用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产品功能图:

T527_DRM驱动介绍及图形界面选型连载(1)的更多相关文章

  1. Ubuntu 14.04 安装nVidia驱动后不能进入图形界面的恢复过程

    想要解决Ubuntu14.04的风扇不停的转的问题.由于ubuntu本身不支持双显卡切换,导致集显独显都处于开启状态,发热量和耗电量居高不下. 1. 安装驱动过程 参考[1]中的步骤,做了如下的操作. ...

  2. Ubuntu16.04更换NVIDIA驱动导致无法进入图形界面的解决方案

    一.进入recovery模式 由于无法进入图形界面,所以需要在开机时进入恢复模式.我的机器上时在开机时通过引导选项中的recovery mode选项进入,进入之后可以看到许多选项卡,选择root,回车 ...

  3. 转载:Linux图形界面知识(介绍X、X11、GNOME、Xorg、KDE等之间的关系)

    转载 http://blog.csdn.net/zhangxinrun/article/details/7332049Linux初学者经常分不清楚linux和X之间,X和Xfree86之间,X和KDE ...

  4. linux启动后自动登录并运行自定义图形界面程序

    在<Ubuntu CTRL+ALT+F1~F6 进入命令模式后不支持中文显示的解决办法>一文中提到linux启动在以后运行一个独占显示器的图形程序的两种办法. 1.不启动xserver,使 ...

  5. 树莓派系列教程:1.环境与系统,无显示器无键盘无网线联网并使用PuTTy与VNC图形界面远程登录

    本文所需物品清单: Raspberry Pi 3 Model B 主板.SD卡与读卡器(用于烧录系统) 资料整理来源在文尾 需要下载的资源与工具: 推荐系统-Raspbian 树莓派官方深度定制的硬件 ...

  6. 树莓派系列教程:安装系统与配置环境,使用PuTTy与VNC图形界面远程登录

    本文所需物品清单: Raspberry Pi 3 Model B 主板.SD卡与读卡器(用于烧录系统) 资料整理来源在文尾 需要下载的资源与工具: 推荐系统-Raspbian 树莓派官方深度定制的硬件 ...

  7. 一、Linux 设备驱动介绍及开发环境搭建

    1.1 Linux 设备驱动介绍 1.1.1 分类及特点 计算机系统的硬件主要由 CPU.存储器和外设组成. 当前 CPU 内部都集成有存储器和外设适配器. 外设适配器有入 UART.IIC 控制器. ...

  8. [.net 面向对象程序设计进阶] (25) 团队开发利器(四)分布式版本控制系统Git——使用GitStack+TortoiseGit 图形界面搭建Git环境

    [.net 面向对象程序设计进阶] (25) 团队开发利器(四)分布式版本控制系统Git——使用GitStack+TortoiseGit 图形界面搭建Git环境 本篇导读: 前面介绍了两款代码管理工具 ...

  9. 使用Xmanager远程连接CentOS6.4图形界面详解(图文)

    1.首先安装与下载图形界面GNOMEyum groupinstall "Desktop"yum groupinstall "X Window System"yu ...

  10. arch 安装图形界面

    图形界面的安装.--- 引导: .显卡驱动,这里我们是集成显卡,根据wiki提示安装xf86-video-intel .安装xorg-server,xorg-server-utils,xorg-xin ...

随机推荐

  1. ciscn暨长城杯 广东赛区 ISW阶段应急响应

    ciscn暨长城杯 广东赛区 ISW阶段应急响应 题目介绍 小路是一名网络安全网管,据反映发现公司主机上有异常外联信息,据回忆前段时间执行过某些更新脚本(已删除),现在需要协助小路同学进行网络安全应急 ...

  2. OS期末复习总结

    期末样题 : 链接:https://pan.baidu.com/s/12Mfi_lnhBDbuke6B_qCiJg 提取码:khp7 一.易错易混点: 下列进程调度算法中,可能引起进程长时间得不到运行 ...

  3. Java安全01——URLDNS链分析与利用

    URLDNS链分析与利用 作用 URLDNS 利用链只能发起 DNS 请求,不能执行命令,所以用于漏洞的检测 不限制JDK版本,使用Java内置类,无第三方依赖要求 可以进行无回显探测 利用链 ​ 利 ...

  4. 装在U盘或移动固态硬盘里的系统——适用于Ventoy和VirtualBox的Win to go 和 Linux to go 系统制作教程

    写在前面 前段时间, 突然想起了大学期间折腾过的双系统, 又恰逢最近学习工作需要用到Linux系统环境, 用虚拟机又感觉性能跟不上, 因此萌生了一个用移动固态硬盘安装双系统的想法. 照着网络上各位老师 ...

  5. 最新版Navicat Premium v15.0.26 中文破解

    注册机和主要流程参考<Navicat Premium v15.0.25 中文最新破解版(附:激活工具)>,但是,要注意以下细节: 断网 重装navicat 将注册机放到Navicat Pr ...

  6. Spring AOP 面向切面编程之搞定表单重复提交实战

    摘要:客户端在5秒内请求同一URL,而且关键请求参数相等,则视此次请求为重复提交,利用自定义注解 .Spring AOP 和 Guava Cache 技术栈在服务器端实现拦截表单重复提交,防止刷单. ...

  7. 股票技术面分析方法-K线图

    看涨吞没形态 看跌吞没形态 启明星形态       图形信号:看涨信号.第三根K线实体越长,看涨信号越强. 关键要素: 第二根K线是纺锤线或十字星 第三根K线向上能覆盖第一根K线的大半部分实体 黄昏星 ...

  8. FFmpeg开发笔记(六十三)FFmpeg使用vvenc把视频转为H.266编码

    ​前面的两篇文章分别介绍了如何在Linux环境和Windows环境给FFmpeg集成H.266的编码器vvenc,接下来利用ffmpeg把视频文件转换为VVC格式,观察新生成的vvc视频能否正常播放. ...

  9. equals与==与hashCode的区别与联系

    equals与hashcode的区别与联系 1."=="与equals的区别与联系 (1)"=="对于基本数据类型,只要值相等,就返回true,否则返回fals ...

  10. 香港CN2优化线路带宽低延迟VPS服务器推荐

    原文:https://ichochy.com/posts/20231120.html CN2 CN2,中国电信下一代承载网(ChinaNetNextCarryingNetwork).CN2是一个多业务 ...