• framebuffer 知识点


    设备文件是在/dev/目录下
    设备文件有主设备号,次设备号.
    当操作设备文件, 系统会根据设备文件的设备号找到相应的设备驱动(驱动在内核注册时已指定使用的设备号),并调用相应的功能.
      open ---> sys ----> driver ---> drv_open
      read ---> sys ----> driver ---> drv_read
      ioctl --> sys ----> driver ---> drv_ioctl
        
    //////////////////////////////////////

    一幅图由很多行数据, 每行由很多个像素点组成.
        800x600: 表示600行, 每行800个像素点
        1024x768

        1024x768x16: 表示共有768行, 每行1024个像素点, 每个像素点的数据占用16位
            rgb565
        1024x768x24: 表示共有768行, 每行1024个像素点, 每个像素点的数据占用24位
            rgb888
        1024x768x32: 表示共有768行, 每行1024个像素点, 每个像素点的数据占用32位
            argb8888   a:透明度


    每个像素点表示一个顔色, 一个顔色由三基色(Red, Green, Blue)组成. 也就是说一个像素点的数据位里包含有R多少, G/B各是多少的信息. R,G, B各占用不同的几位来表示

    256色:表示共有256种顔色, 每个像素点数据占用一个字节(8位).
          首先把图里使用频率最高的256种顔色做成一个顔色表(每种顔色还是RGB888), 每个像素点的数据不是记录RGB的数据, 而是记录对应顔色表里的索引号

    每个像素点占16bit(16位色):
    RGB1555:  RGB各占用5bit, 1bit可用于表示透明
    RGB565:   R占用高5位(11-15, G占用6位(5--10), B占用5位(0-4)

    每个像素点占24bit(24位色):
    RGB888:   RGB各用8位

    每个像素点占32bit(32位色):
    RGB8888:  RGB各占用8位, 最高8位用于透明度的表示

    ////////////////////////////////////////////////////
    linux系统下, 没有LCD驱动. 对应的驱动应叫framebuffer驱动(显存).
    驱动好后, 对应设备文件应是/dev/fb*

    显存: 就是在内存里分出一个区域,专用于画出要显示的图像(如窗口系统等). 而LCD的显示是由DMA控制器自动从这个区域里把RGB数据搬到LCD控制器里显示的

    DMA控制器:就是数据的搬运工, 只要设好从哪里搬,搬到哪里去. 就可以自动循环工作.


    我们要显示一个图片或一个窗口,只需要改变显存里的数据就可以了

    //////////////
    ioctl函数用于从驱动里获取相应的配置信息; 或者把配置信息传递给驱动,让驱动根据相应的配置信息来设置硬件

    int ioctl(int fd, int request, ...); //返回值为0表示执行成功,-1表示执行失败
        fd表示打开设备文件获取到的文件描述符
        request表示告诉驱动需要做什么操作. 具体的值是由驱动与应用程序约定好的
        ...不定参数.

    man 2 ioctl_list //查看系统里常用的ioctl命令
    ///////////////////////////
    bmp文件里面除了256色的文件外,  里面每个像素存放的都是RGB数据和一个文件头.

    24bit的bmp文件大小:  文件头54字节+分辨率*3字节每个像素

    注意:bmp文件里存放的图片数据是反着的, 要正确显示,需要把图中的第0行放到显存里的最后一行, 图里的第一行放到显存里的倒数第一行, 图里的第二行放到屏的倒数第二行....

  • 相关阅读:
    logback 常用配置详解(二) <appender>
    logback 配置详解(一)
    logstash报错如下:Validation Failed: 1: this action would add [2] total shards, but this cluster currently has [999]/[1000] maximum shards open
    从字节码角度分析Byte类型变量b++和++b
    接口和抽象类有什么区别?你选择使用接口和抽象类的依据是什么?
    计算1至n中数字X出现的次数
    转:轻松搞定面试中的红黑树问题
    转:40个Java集合面试问题和答案
    自定义Adapter为什么会重复多轮调用getView?——原来是ListView.onMeasure在作祟
    何时调用getView?——从源码的角度给出解答
  • 原文地址:https://www.cnblogs.com/edan/p/9267177.html
Copyright © 2020-2023  润新知