linux 修改分辨率lcd_GUI引擎|Linux系统FB驱动框架

本文介绍了Linux系统中framebuffer(fb)机制,用于在没有集成显卡或不同平台LCD硬件配置差异的环境下简化开发。fb作为字符设备,允许直接对显存进行读写操作。通过ioctl和mmap,用户程序可以获取和操作屏幕缓冲区,实现绘图和显示。文章详细阐述了fb的驱动框架,包括fb_info、fb_ops、fb_fix_screeninfo、fb_var_screeninfo和fb_cmap结构体,以及mmap映射过程。
摘要由CSDN通过智能技术生成

    大家好,欢迎做客光帅读书圈,这里是知识的搬运工,我们继续GUI引擎,今天学习FB节点。

01

什么是fb

        对于Linux系统设备,framebuffer机制模仿显卡的功能,将显卡硬件结构抽象为一系列的结构数据,可以通过framebuffer的读写直接对显存进行操作。Linux系统中,抽象成一个字符节点(/dev/fb)。要实现显示功能,将fb映射到进程空间后,就可以直接进行读写操作,写操作会直接反映在屏幕显示的画面上。

      为啥要这样做?是因为Linux系统中,大多数硬件环境没有集成显卡,同事不同的平台,LCD硬件配置存在差异。为了简化上层开发人员的开发方式,而封装出来的一个接口。

6fba355219877e45d7aba1e5a4aae041.png

图 1 数据流图

    如图1所示,为设备打开显示流程

02

fb的使用介绍

       Framebuffer是个字符设备,主设备号为29,对应于/dev/fb%d设备文件。

  通常如下方式(前面的数字表示次设备号)

0 = /dev/fb0 第一个fb设备

1 = /dev/fb1第二个fb设备

  Fb设备也是一种的普通的内存设备,可以读写其内容。例如,屏幕抓屏:cp /dev/fb0 myfilefb 虽然可以像内存设备(dev/mem)一样,对其read,write,seek以及mmap。但区别在于fb使用的不是整个内存区,而是部分显存.

fb与应用程序的交互,对于用户程序而言,它和其他的设备并没有什么区别,用户可以把fb看成是一块内存。既可以向内存中写数据,也可以读数据。Fb的显示缓冲区位于内核空间,应用程序可以把此空间映射到自己的用户空间,进行操作。

在应用程序中,操作/dev/fbn的一般步骤如下:

(1)打开/dev/fbn设备文件。

(2)用ioctl()操作取得当前显示屏幕的参数,如屏幕分辨率,每个像素点的比特数。根据屏幕参数可计算屏幕缓冲区的大小。

(3)用mmap()函数,将屏幕缓冲区映射到用户空间。

(4)映射后就可以直接读/写屏幕缓冲区,进行绘图和图片显示了。

03

驱动框架

 如下图所示,fb内部函数的实现,属于驱动层。

12df2c26a642a4b1d2f92425819332be.png

图2 驱动层次接口

(1)struct  fb_info 

   一个帧缓冲区对应一个struct fb_info结构,它包括了帧缓冲设备的属性和操作的完整集合,每个帧设备都有一个fb_info结构体。

(2)struct  fb_ops

  结构体用来实现对帧缓冲设备的操作,这些函数需要驱动开发人员编写,

(3)struct  fb_fix_screeninfo

   该结构体记录了用户不能修改的固定显示控制器参数。这些固定的参数如缓冲区的物理地址、缓冲区的长度等等。

(4)struct  fb_var_screeninfo

   结构体中存储了用户可以修改的显示器控制参数,例如屏幕分辨率、透明度等等。

(5)struct  fb_cmap

  结构体中记录了颜色板信息,即调色板信息。,用户空间可以通过ioctl()的FBIOGETCMAP和 FBIOPUTCMAP命令读取或设定颜色表。

951ee6230fe495a62f86eb3a032d6edd.png

图 3 结构体直接的关系

54b66c147a1bc795c35b2a60d065d41a.png

图4 驱动内部调用流程

如图3、图4所示,为结构体之间的关系,以及内部调用的接口流程。

04

mmap映射

framebuffer驱动最重要的功能就是给用户提供一个进程空间映射到实际的显示物理内存的接口(mmap)。当用户图像数据buffer和内核虚拟地址空间buffer对应的都是同一块物理内存时,资源数据拷贝到用户图像数据buffer时,即是直接拷贝到显示物理内存了。

af8cd15ac6d57d64eef242f156ddb048.png

图5 内存映射说明

    以上就是本周的技术分享,知识的搬运工,给大家呈现最好最没有的技术文档。你的点赞和关注将是我最好的动力。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值