嵌入式Linux:FrameBuffer 和 DRM/KMS(一)

news2024/11/23 22:33:13

文章目录

  • 前言: Linux 的两种显示方案
  • FrameBuffer
  • DRM
    • 1、GEM
    • 2、KMS

参考:RK3399 探索之旅 / Display 子系统 / 基础概念

参考:DRM架构介绍(一)

前言: Linux 的两种显示方案

包括:

  • FBDEV: Framebuffer Device

  • DRM/KMS: Direct Rendering Manager / Kernel Mode Setting

它们有什么区别?

FBDEV:

  • 传统的显示框架;
  • 简单,但是只能提供最基础的显示功能;
  • 无法满足当前上层应用和底层硬件的显示需求;

DRM/KMS:

  • 目前主流的显示方案;
  • 为了适应当前日益更新的显示硬件;
  • 软件上能支持更多高级的控制和特性;

 DRM 是 Linux 目前主流的图形显示框架,相比 FrameBuffer 架构,DRM 更能适应当前日益更新的显示硬件。比如 FB 原生不支持多层合成,不支持 VSYNC,不支持 DMA-BUF,不支持异步更新,不支持 fence 机制等等,而这些功能 DRM 原生都支持。同时 DRM 可以统一管理 GPU 和 Display 驱动,使得软件架构更为统一,方便管理和维护。

 DRM 全称是 Direct Rendering Manager,进行显示输出管理、buffer 分配、帧缓冲。对应 userspace 库 为 libdrm,,libdrm 库提供了一系列友好的控制封装,使用户可以方便的进行显示的控制和 buffer 申请。DRM 的设备节点为 “/dev/dri/cardX”, X 为 0-15 的数值,默认使用的是/dev/dri/card0

从驱动的视角看:
在这里插入图片描述
传统linux显示设备驱动开发时,通常使用FB驱动架构,随着显卡性能升级:显示覆盖(菜单层级)、GPU加速、硬件光标,传统FB架构无法很好支持,此外,对于多应用的访问冲突也无法很好控制。在这样的背景下,DRM应用而生。

DRM是linux内核中负责与显卡交互的管理架构,用户空间很方便的利用DRM提供的API,实现3D渲染、视频解码和GPU计算等工作。

FrameBuffer

DRM

 目前大多数厂商已经抛弃fb框架,使用drm驱动来管理显示。其中的优点是芯片厂商不必重复造轮子,只需将自己显示处理器的配置流程实现为函数,由drm驱动调用即可。同时drm也为用户提供同一接口,方便使用。

DRM驱动模块

了解过drm的可能都看过下面这张图
在这里插入图片描述
DRM subsystem图:

在这里插入图片描述虽然经常用 DRM/KMS 来指代整个 DRM subsystem,但是 KMS 和 DRM driver 只是 整个 DRM subsystem 的其中 2 个部分。

KMS (Kernel Mode Setting) 是内核提供给应用层的 DRM API 的其中一部分,应用层一般通过 libdrm 来访问这些 API。

对于驱动工程师而言,重点关注 DRM driver,这里负责使能 Display engine,可以理解为加强版的 FBDEV。

Linux内核DRM框架包括:GEM和KMS。展示DRM大体框架:
在这里插入图片描述

1、GEM

GEM(Graphic Execution Manager):图形执行管理器,主要是对 FrameBuffer 的管理,如内存的申请、释放、共享和同步(GPU和CPU之间内存)机制等。

GEM常用的Buffer包括:

1)Dumb Buffer:基于cma api实现,只支持连续物理内存,用于小分辨率简单场景。

2)Prime Buffer:基于dma-buf实现的buffer共享机制,支持连续、非连续物理内存,用于大内存复杂场景。

2、KMS

KMS(Kernel Mode Setting):内核显示模式设置,主要元素:Framebuffer、Plane、CRTC、Encoder、Connector。见下图:

在这里插入图片描述

1)Framebuffer:单个图层的显示内容,应用层和内核都可访问。

2)Plane:硬件图层,可实现多层合成显示,连接FB和CRTC。包括:Primary、Overlay和Cursor,驱动中至少实现1个Plane。

3)CRTC:对内存Buffer进行扫描,并转换成LCDC Timing信号。

4)Encoder:将CRTC输出的LCDC Timing时序转换成显示屏所需要的接口时序。

5)Connector:对应显示屏接口(HDMI、MIPI DSI、LVDS等)驱动和输出设备的相关状态信息(EDID、热插拔等)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/489973.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MediaSoup c#】 worker的创建

js rust 不太熟,c# 似乎还好懂一些。学习media soup 的各个组件及大体使用方式学习其设计理念。MediasoupServer 管理worker列表 worker的表达是通过 IWorker 抽象类 拥有一个observer 实例 (EventEmitter): /// <summary>/// Observer instance./// </summary&g…

顺序表和链表优缺点以及区别

顺序表和链表的区别 顺序表优点缺点 链表优点缺点 顺序表和链表不同点 顺序表 优点 1.尾插尾删效率高 2.支持随机访问 3/相比于链&#xff0c;cpu高速缓存命中率更高 缺点 1.在头部和中部插入删除效率底 2.需要大片连续空间&#xff0c;改变容量不方便 链表 优点 1.不需要…

【嵌入式Linux驱动】驱动开发调试相关的关系记录

https://www.processon.com/mindmap/64537772b546c76a2f37bd2f

MySQL概述 -- 数据模型SQL简介DDL数据库操作

一. 数据模型 介绍完了Mysql数据库的安装配置之后&#xff0c;接下来我们再来聊一聊Mysql当中的数据模型。学完了这一小节之后&#xff0c;我们就能够知道在Mysql数据库当中到底是如何来存储和管理数据的。 在介绍 Mysql的数据模型之前&#xff0c;需要先了解一个概念&#x…

SPSS如何进行对应分析之案例实训?

文章目录 0.引言1.对应分析2.多重对应分析 0.引言 因科研等多场景需要进行绘图处理&#xff0c;笔者对SPSS进行了学习&#xff0c;本文通过《SPSS统计分析从入门到精通》及其配套素材结合网上相关资料进行学习笔记总结&#xff0c;本文对对应分析进行阐述。 1.对应分析 &#…

混合策略改进的金枪鱼群优化算法(HTSO)-附代码

混合策略改进的金枪鱼群优化算法(HTSO) 文章目录 混合策略改进的金枪鱼群优化算法(HTSO)1.金枪鱼群优化算法2. 改进金枪鱼群优化算法2.1 Circle混沌映射初始化种群Circle2.2 Levy flight改进螺旋式觅食 3.实验结果4.参考文献5.Matlab代码6.Python代码 摘要&#xff1a;针对金枪…

操作系统考试复习——第三章 进程调度和实时调度

进程调度的方式分为&#xff1a;抢占式和非抢占式 采用非抢占式时&#xff0c;一旦把处理机分配给某进程后&#xff0c;就让他一直运行下去&#xff0c;决不会因为时钟中断或其他任何原因去抢占当前正在运行进程的处理机。直至该进程完成或因为某件事情堵塞&#xff0c;才把处…

MMediting1.X进行视频超分训练和测试(BasicVsr++)

因为MMediting更新了版本&#xff0c;整体的变化比较大&#xff0c;导致之前的一些介绍操作的帖子不太适合新手入门&#xff0c;这里以作者自己对BasicVsr模型进行测试和训练的过程&#xff0c;写一下具体的操作过程。 &#xff08;1&#xff09;找到模型     首先在config…

JavaScript判断是否为NaN

&#xff08;旅行是最劳顿&#xff0c;最麻烦&#xff0c;叫人本相必现的时候。经过长期苦旅行而彼此不讨厌的人&#xff0c;才可以结交作朋友。——钱钟书&#xff09; 为什么NaN在js值得一提 相信你在实际开发中&#xff0c;经常遇到一下场景 const pasNumber parseInt(un…

财报解读:照明行业景气上行,欧普照明已步入增长“快车道”

2023年&#xff0c;随着文旅景观照明复苏&#xff0c;教室照明市场蓬勃发展&#xff0c;双碳战略下照明数字化系统加速建设&#xff0c;照明企业迎来行业曙光。近日&#xff0c;A股绿色照明龙头企业欧普照明股份有限公司&#xff08;下称“欧普照明”&#xff0c;股票代码60351…

刷题记录˃ʍ˂

一、1033. 移动石子直到连续 思路 这道题是一道数学题&#xff0c;它一共分为三种可能 第一种可能为三个石子本来就是连续的时候 第二种可能为最少步数为1的时候&#xff0c;相邻石子不能大于一格 第三种可能为最少步数为2的时候&#xff0c;这时相邻石子大于一格 那么第二…

华为MPLS跨域C1方式RR场景(数据经过RR)实验配置

目录 配置BGP邻居的建立 配置MPLS LDP 配置RR之间的MP-BGP邻居 根据图配置接口的IP地址和IGP协议 配置BGP邻居的建立 PE1和RR1建立IBGP邻居、RR1和ASBR1建立IBGP邻居&#xff08;RR1作为反射器&#xff09; PE1和RR1建立MP-IBGP邻居&#xff08;RR1传给PE1的Vpnv4路由要求更…

2023 hnust 大三下 人工智能导论课程 期中考试复习笔记

前言 ★大概率考✦个人推测考点※补充内容没有完全覆盖“人工智能导论复习2023.pdf”的重点致谢&#xff1a;hwl、lyf、lqx 题型 问答&#xff1a;5*10分综合&#xff1a;15分设计&#xff1a;25分开放题/论述题&#xff1a;10分 第1章 绪论 人工智能的定义 智能 思考与…

Android ADB安装apk失败:INSTALL_FAILED_TEST_ONLY

droid ADB安装apk失败:INSTALL_FAILED_TEST_ONLY 解决&#xff1a; 1、一种是在代码里面加&#xff0c; 在gradle.properties配置文件加入属性&#xff0c;把testOnly设置为false Android安装apk失败&#xff1a;The application could not be installed: INSTALL_FAILED_TES…

Java内存模型之JMM

计算机硬件存储系统 因为有这么多级的缓存&#xff08;cpu和物理主内存的速度不一致&#xff09; CPU的运行并不是直接操作内存而是把内存里边的数据读取到缓存&#xff0c;而内存的读和写操作的时候就会造成不一致的问题 JVM规范中试图定义一种Java的内存模型&#xff08;ja…

【算法与数据结构】递归函数设计技巧

数学归纳法 step1: 验证P(1)成立step2: 证明如果P(k)成立&#xff0c;那么P(k1)也成立step3: 联合step1和step2&#xff0c;证明由P(1)->P(n)成立 例1&#xff1a; 证明&#xff1a; 1 3 . . . ( 2 n − 1 ) n 2 13...(2n-1) n^2 13...(2n−1)n2 证明P(1)成立&#…

Midjourney之logo设计(建议收藏)

目录 宠物诊所的logo设计 常见的Logo类型 图形logo: 字母LOGO APP LOGO 进阶技巧 设置艺术家风格 去掉不需要的元素 ChatGPT Midjourney设计logo 聊天&#xff08;国产&#xff09;&#xff1a;文心一言通义千问 绘图&#xff08;国产&#xff09; UI设计 ChatGP…

LangChain入门(四)-构建本地知识库问答机器人

在这个例子中&#xff0c;我们会介绍如何从我们本地读取多个文档构建知识库&#xff0c;并且使用 Openai API 在知识库中进行搜索并给出答案。 目录 一、安装向量数据库chromadb和tiktoken 二、使用案例 三、embeddings持久化 四、在线的向量数据库Pinecone 一、安装向量数…

Maya云渲染怎么操作?看这一篇就够了

Autodesk Maya 是一款3D动画和视觉效果软件&#xff0c;拥有强大的角色建模、绑定、动画和模拟工具集&#xff0c;与Maya兼容的渲染器包括 Arnold&#xff08;默认渲染器&#xff09;、iRay、Maxwell、ProRender、Octane、Redshift、V-Ray、RenderMan 等。 与 Autodesk 的所有产…

异常排查 | 有关页面部署Tomcat造成的端口冲突问题

今日在写Servlet的时候&#xff0c;将网页部署到tomcat时&#xff0c;出现了如下错误&#x1f447; 严重 [main] org.apache.catalina.core.StandardService.initInternal Failed to initialize connector [Connector[HTTP/1.1-8080]]一开始其实还没有发现这个地方出了问题&…