zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    python爬虫之requests库
    python爬虫之urllib库
    fiddler配置及使用教程
    react中受控组件相关的warning
    Sublime Text 自动生成文件头部注释(版权信息):FileHeader 插件的使用
    手动安装sublime插件babel-sublime
    自定义组件 点击空白处隐藏
    pagination分页(支持首页,末页,跳转)
    vue打包以后,除了首页意外,其余页面是空白
    pm2踩过的坑
  • 原文地址:https://www.cnblogs.com/Ocean-Star/p/9245340.html
Copyright © 2011-2022 走看看