• 5.7.1.framebuffer介绍


    本节介绍framebuffer的概念和来源、设计思想,fb设备的应用层接口等,为下节使用framebuffer应用编程打基础。

    5.7.1.1、什么是framebuffer
    (1).裸机中如何操作LCD
    Soc里面有CPU,LCD控制器;外部有LCD的驱动器,驱动器后面带着屏幕,驱动器和控制器之间使用LCD排线进行连接(LCD特有的接口)。CPU通过操作LCD控制器里面的寄存器,使得DDR分出一部分作为显存,显存和LCD屏幕做双向映射。以后CPU只需要把要显示的内容放入显存。硬件就会自动将内容数据刷到驱动器里面,驱动器操控LCD就可以显示。

    关键点:LCD控制器操纵显存。

    (2).OS下操作显存的难点
    分层。分为内核(驱动)和应用。驱动做跟底层硬件相关(初始化寄存器,内存,内存与LCD之间映射);应用把要显示的内容丢到显存里面去。应用驱动怎么配合。驱动是在内核空间,应用在应用空间。两者之间通信不能用copy_to_user或者copy_from_user(小容量),要将mmap映射:在内核空间申请一段内存作为显存,在将内存的物理地址用Mmap映射虚拟地址。这时应用里面也有一个显存,

    (3)framebuffer帧缓冲,是linux内核中虚拟出来的一个设备,用来代替LCD显示器这个硬件设备以及软件设施

    *  frambuffer向应用层提供一个统一接口的显示设备,所以应用层就不用管驱动层
    *  从驱动来看,fb是一个典型的字符设备,而且定义了一个类/sys/class/qraphics
    

    framebuffer是linux系统为显示设备提供的一个接口,它将显示缓冲区抽象,屏蔽图像硬件的差异,允许上层应用程序在图像模式下直接对显示缓冲区进行读写操作。用户不必关心物理显示缓冲区的具体位置以及存放方式,这些都有帧缓冲设备驱动本身来完成。
    framebuffer机制模仿显卡的功能,将显卡硬件结构抽象为一系列的数据结构,可以通过framebuffer的读写直接对显存进行操作。用户可以将framebuffer看成是显卡的一个映像,将其映射到进程空间后,就可以直接进行读写操作,写操作会直接反映在屏幕上。
    帧缓冲设备为标准的字符型设备,在linux中的主设备号29,定义在/include/linux/major.h中的FB_MAJOR,次设备号定义帧缓冲的个数,最大允许有32个FrameBuffer,定义在/include/linux/fb.h的FB_MAX,对应文件系统下的/dev/fb%d设备文件,使用如下方式:前面的数字表示次设备号

    * 0 = /dev/fb0 第一个fb设备
    * 1 = /dev/fb1 第二个fb设备
    

    fb也是一种普通的内存设备,可以像内存设备/dev/mem一样,对其read,write,seek以及mmap。但区别在于fb使用的不是整个内存区,而是显存部分。

    5.7.1.2、framebuffer的使用(应用层)

    (1). 打开设备文件/dev/fb0
    如果系统没有显示器就没有fb,所以一定是fb0,如果有三个显示器就是fb0,fb1,fb2

    ls /dev/fb0

    (2). 获取设备信息 #include <linux/fb.h>
    调用相关接口读取屏幕,分辨率之类

    (3)mmap做映射

    (4)填充framebuffer

  • 相关阅读:
    WebHttpRequest在sharepoint文档库中的使用
    使用log4net无法将日志记录插入mysql数据库解决办法
    通过WebClient模拟post上传文件到服务器
    webservice测试窗体只能用于来自本地计算机的请求
    rest api方式实现对文档库的管理
    咏南中间件支持即时通讯
    QJSON封装好的序列和还原方法
    ADO特有的流化和还原
    FIREMONEY手机虚拟键盘遮挡的解决
    安卓安装ZXING(二维码)SDK
  • 原文地址:https://www.cnblogs.com/Ocean-Star/p/9245340.html
Copyright © 2020-2023  润新知