framebuffer的显示原理以及缺点分析

1、概述

在使用LCD的时候,存在这样两个问题:
1)、linux内存中,对内存管理严格,显存需要申请,不能想用就用。
2)、linux是工作在保护模式下的,每个应用程序都有自己的虚拟地址空间,这就导致应用程序不能直接访问LCD设备在内核中实际的物理缓冲区地址。
为了解决上述问题,我们引入framebuffer,帧缓冲。
注:
1)、帧缓冲:是一种机制,通过framebuffer机制,应用程序可以直接操作内核里面的显存。
2)、帧缓冲设备可以通过mmap()映射将屏幕缓冲区的物理地址映射到用户空间的的一块虚拟地址上。对用户空间以设备文件节点的形式暴露出来/dev/fbX(x=0-31,也就是他最大支持32个framebuffer.他们的主设备号都是29) 由此,引出3):。用户通过读写这段虚拟地址,就可以访问屏幕缓冲区,实现在屏幕上绘图了。
frambuffercd相当于一个水池。每个lcd内都有一个sram,cpu内部有个LCD控制器,它会将framebuffer里面的数据拷贝到LCD的sram里面,拷贝到sram中的数据会显示在LCD上。同样,用户程序也可以直接从这个“水池“中读到数据。
由此,引出4):
3)、LCD驱动,是platform驱动。当驱动和设备匹配以后,probe函数就会执行。他所执行的操作总是要就是:
向申请、初始并向内核注册Framebuffer(fb_info)。
在内核中,Framebuffer被抽象成事一个fb_info结构体。
换言之,LCD驱动的编写,其实就是:
a、向用户空间提供文件操作接口函数。
b、构建fb_info结构体,并向内核注册fb_info结构体的过程。驱动编写好以后,就会生成一个/dev/fbX的设备文件。
framebuffer设备驱动(字符设备驱动)的结构图:
在这里插入图片描述
4)、有人认为“操作LCD显示,实质上就是在操作framebuffer”,从表面上来看,确实是这样子。但是,仔细分析,会发现问题。实质上,framrbuffer就是linux内核驱动申请的一片物理空间。因此,从这可以看出,LCD驱动和framebuffer驱动没有必然的联系,LCD驱动只是驱动LCD正常的工作,eg:有信号传来,LCD驱动负责将信号转成LCD显示屏上的内容,至于是什么内容,怎么显示,LCD驱动并不关心。对于帧缓冲,只需要将显示的缓冲区与显示数据的RGB颜色值一一对应,RGB数据通过LCD控制器发送给LCD的sram,实现在屏幕上的显示。
framebuffer的显示原理:
在这里插入图片描述

2、framebuffer的缺点

1)、当只使用一个framebuffer的时候, 会存在这样一问题:就是framebuffer同时被应用程序写和驱动程序读(LCD控制器搬运)。如果应用程序写入的速度慢,将会导致画面显示的很慢或者闪烁。为了解决这个问题,可以使用两个或多个framebuffer。只有应用程序向framebuffer写入数据完成的时候,才让LCD控制器去搬运数据。在这个期间,应用程序向另一个framebuffer写入数据,这样循环往复,解决上述问题。
2)、在做界面的时候,存在的问题
假设两个界面切换,如果这两个界面的区别不大,若还是使用之前的方法—》逐一描绘,显然做了大量重复的操作。为了解决这个问题,我们将界面进行分层(eg:状态栏:第一层;背景,第二层;图标,第三层),一个层用一个framebuffer来描绘。最后借助硬件(HardWare ConPoser—>HWC)进行硬件合并,然后将合并后的图片显示。
在实际的应用中,我们如果要使用屏幕,都是通过UI库的。我们只需要告诉UI库,我们这个LCD对应的设备是dev/fbx,UI库就会使用dev/fbx创建他的一整套UI库,我们直接调用UI库提供的函数即可,eg:QT.通过QT的那一套,做界面,就可以了。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Framebuffer显示是一种直接在计算机的帧缓冲区(Framebuffer)中进行图像渲染和显示的技术。帧缓冲区是计算机系统中用于存储图像数据的内存区域,它包含了屏幕上每个像素的颜色和其他相关信息。Framebuffer显示技术直接在帧缓冲区中进行图像绘制,然后将绘制好的图像数据发送给显示设备进行显示Framebuffer显示相较于传统的图形窗口系统或者文字终端有以下几个优势: 1. 直接访问:通过Framebuffer显示,可以直接访问帧缓冲区中的像素,可以直接操作像素值来进行图像渲染和处理,而不需要通过窗口系统的API或者终端的字符绘制函数。 2. 更高的性能:由于直接访问帧缓冲区,Framebuffer显示可以获得更高的图像渲染和显示性能。特别是在一些嵌入式系统或者实时图形应用中,需要追求更低的延迟和更高的响应速度。 3. 独立性:Framebuffer显示与具体的操作系统或者窗口系统无关,可以在各种平台上实现,并且可以更好地控制和定制图像显示的方式和效果。 在实际使用中,Framebuffer显示可以通过操作系统提供的API或者直接与硬件交互来实现。一些嵌入式系统或者实时图形应用会直接访问硬件的帧缓冲区,而在一些桌面系统中,会通过操作系统提供的API(如LinuxFramebuffer设备接口)来进行Framebuffer显示。 总之,Framebuffer显示是一种直接在帧缓冲区中进行图像渲染和显示的技术,它具有直接访问、更高性能和独立性等优势,适用于一些对图像渲染和显示性能有较高要求的应用场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

One Piece&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值