本文转载自:http://blog.csdn.net/liuxd3000/article/details/17464779

一、基本概念

帧缓冲(Framebuffer)是Linux系统为显示设备提供的一个接口,它将显示缓冲区抽象,屏蔽图像硬件的底层差异,允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。用户不必关心物理显示缓冲区的具体位置及存放方式,这些都是由帧缓冲设备驱动本身来完成。对于帧缓冲设备而言,只要在显示缓冲区与显示点对应的区域写入颜色值,对应的颜色会自动在屏幕上显示,下一小节重点讲解各种模式下缓冲区与显示点的对应关系。

/**********************************************************************************************************************************/

原创作品,转载时请务必以超链接形式标明文章原始出处:http://blog.csdn.net/gqb666/article/details/9338679,作者:gqb666  
/**********************************************************************************************************************************/

帧缓冲设备为标准字符设备,主设备号为29,对应于/dev/fbn设备文件。应用程序可以通过打开读写此设备文件而讲视频及图像数据输出到显示设备上。在接下来的博文中会介绍用户态如果操作帧缓冲设备的方法,linux抽象出FrameBuffer这个设备来供用户态进程实现直接写屏。 Framebuffer机制模仿显卡的功能,将显卡硬件结构抽象掉,可以通过Framebuffer的读写直接对显存进行操作。用户可以将Framebuffer看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反应在屏幕上。这种操作是抽象的,统一的,用户不必关心物理显存的位置、换页机制等等具体细节,这些都是由Framebuffer设备驱动来完成的,但Framebuffer本身不具备任何运算数据的能力,就只好比是一个暂时存放水的水池,CPU将运算后的结果放到这个水池,水池再将结果流到显示器,中间不会对数据做处理,应用程序也可以直接读写这个水池的内容。在嵌入式系统中一般没有专门的显存,而仅仅是从RAM(SDRAM)空间中分配一段显示缓冲区,典型结构如下图所示:

二、显示缓冲区与显示点的关系

   在介绍显示缓冲区与显示点的关系前,先介绍下SOC或者CPU支持的色彩模式或者叫颜色位域。色彩模式即一个像素的三元色分别有几位数据组成。如RGBA8888则表示一个像素点由32位数据组,红、绿、蓝及透明度分别是8位。再或者ARGB8888则类似,只是在设置有有关数据结构时注意下顺序及偏移即可。帧缓冲设备中,对屏幕显示点的操作通过读写显示缓冲区来完成,在不同的色彩模式下,显示缓冲区和屏幕上的显示点有不同的对应关系,下图展示了一个像素点8位和16位情况下显示缓冲区与显示点的对应关系。

三、LCD的硬件原理及时序关系

利用液晶制成的显示器称为LCD,依据驱动方式可分为静态驱动、简单矩阵驱动、以及主动矩阵驱动3种。其中,简单矩阵型又可再细分为扭转向列型(TN)和超扭转式向列型(STN)2种,而主动型矩阵则以薄膜式晶体管型(TFT)为主流。下表列出这几种显示器的区别

一块LCD屏不但需要LCD驱动器,还需要有相应的LCD控制器。通常LCD驱动器会以COF/COG的形式与LCD玻璃基板制作在一起,而LCD控制器则由外部电路来实现。许多MCU内部直接集成了LCD控制器,通过LCD控制器可以方便地控制STN和TFT屏。

TFT屏是目前嵌入式系统应用的主流。下图给出了TFT屏的典型时序。时序图中的VCLK、HCYNC、和VSYNC分别为像素时钟信号(用于锁存图像数据的像素时钟)、行同步信号和帧同步信号,VDEN为数据有效标志信号,VD为图像的数据信号。

作为帧同步信号的VSYNC,每发出一个脉冲,都意味着新的一屏图像数据开始发送到屏幕上,而作为行同步信号的HSYNC,每发出一个脉冲都表明新的一行图像数据开始发送到屏幕上。在帧同步以及行同步的头尾都必须留有回扫时间,即图中的(HBPD+1)和(HFPD+1)为行回扫时间,(VBPD+1)和(VFPD+1)为帧回扫时间。这样的时序安排起源于CRT显示器电子枪偏转所需要的时间,但后来成为实际上的工业标准,因此TFT屏也包含了回扫时间。

下图给出一帧数据在实际LCD显示器上显示的映射图。其中的上边界和下边界即为帧切换的回扫时间,左边界和右边界即为行切换的回扫时间,水平同步和帧同步分别是行和帧同步本身需要的时间。x-res和y-res则分别是屏幕的水平和垂直分辨率。

下转博文《Linux Framebuffer驱动框架之二软件架构》。

接下来将有如下博文:

Linux Framebuffer驱动框架之二软件架构
 Linux Framebuffer 驱动框架之三相关数据结构
 Linux Framebuffer 驱动框架之四设备驱动接口
 Linux Framebuffer 驱动框架之五DVI设备驱动的实现
 Linux Framebuffer 驱动框架之六用户态操作framebuffer

Linux Framebuffer 驱动框架之一概念介绍及LCD硬件原理【转】的更多相关文章

  1. Linux Framebuffer驱动框架之二软件架构(未完待续)【转】

    本文转载自:http://blog.csdn.net/gqb_driver/article/details/12918547 /************************************ ...

  2. Linux驱动框架之framebuffer驱动框架

    1.什么是framebuffer? (1)framebuffer帧缓冲(一屏幕数据)(简称fb)是linux内核中虚拟出的一个设备,framebuffer向应用层提供一个统一标准接口的显示设备.帧缓冲 ...

  3. Linux Framebuffer驱动剖析之二—驱动框架、接口实现和使用

    深入分析LinuxFramebuffer子系统的驱动框架.接口实现和使用. 一.LinuxFramebuffer的软件需求 上一篇文章详细阐述了LinuxFramebuffer的软件需求(请先理解第一 ...

  4. 【原创】Linux PCI驱动框架分析(二)

    背 景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本 ...

  5. Linux Framebuffer驱动剖析之一—软件需求

    嵌入式企鹅圈将以本文作为2015年的终结篇,以回应第一篇<Linux字符设备驱动剖析>.嵌入式企鹅圈一直专注于嵌入式Linux和物联网IOT两方面的原创技术分享,稍后会发布嵌入式企鹅圈的2 ...

  6. Linux USB驱动框架分析 【转】

    转自:http://blog.chinaunix.net/uid-11848011-id-96188.html 初次接触与OS相关的设备驱动编写,感觉还挺有意思的,为了不至于忘掉看过的东西,笔记跟总结 ...

  7. linux驱动基础系列--linux spi驱动框架分析

    前言 主要是想对Linux 下spi驱动框架有一个整体的把控,因此会忽略某些细节,同时里面涉及到的一些驱动基础,比如平台驱动.设备模型等也不进行详细说明原理.如果有任何错误地方,请指出,谢谢! spi ...

  8. Linux USB驱动框架分析【转】

    转自:http://blog.csdn.net/jeffade/article/details/7701431 Linux USB驱动框架分析(一) 初次接触和OS相关的设备驱动编写,感觉还挺有意思的 ...

  9. Linux Framebuffer驱动剖析之中的一个—软件需求

    嵌入式企鹅圈将以本文作为2015年的终结篇,以回应第一篇<Linux字符设备驱动剖析>.嵌入式企鹅圈一直专注于嵌入式Linux和物联网IOT双方面的原创技术分享,稍后会公布嵌入式企鹅圈的2 ...

随机推荐

  1. 【GAN学习笔记】对抗式生成网络入门

    今天观看学习了一下台大李宏毅所讲授的 <Introduction of Generative Adversarial Network (GAN)>,对GAN有了一个初步的了解. GAN的基 ...

  2. mysql之数据去重并记录总数

    引用: http://blog.sina.com.cn/s/blog_6c9d65a10101bkgk.htmlhttp://www.jb51.net/article/39302.htm 1.使用di ...

  3. Git 分支创建

    分支策略:git上始终保持两个分支,master分支与develop分支.master分支主要用于发布时使用,而develop分支主要用于开发使用. 创建master的分支developgit che ...

  4. cordova插件分类

    1.android自动更新功能所需插件 cordova plugin add https://github.com/whiteoctober/cordova-plugin-app-version.gi ...

  5. (转)分布式文件存储FastDFS(三)FastDFS配置

    http://blog.csdn.net/xingjiarong/article/details/50559768 在上一节中我们一起搭建了一个单节点的FastDFS系统,但是仅仅将系统搭建起来是远远 ...

  6. jenkins环境搭建(Windows)

    1.下载并解压Tomcat Tomcat官方网站:http://tomcat.apache.org/ 下载并解压,解压后的目录结构如下: 2.下载并安装适合自己电脑系统的 jenkins Jenkin ...

  7. 使用MySQL Yum存储库的快速指南【mysql官方文档】

    使用MySQL Yum存储库的快速指南 抽象 MySQL Yum存储库提供用于在Linux平台上安装MySQL服务器,客户端和其他组件的RPM包.这些软件包还可以升级和替换从Linux发行版本机软件存 ...

  8. [Luogu] P1233 木棍加工

    题目描述 一堆木头棍子共有n根,每根棍子的长度和宽度都是已知的.棍子可以被一台机器一个接一个地加工.机器处理一根棍子之前需要准备时间.准备时间是这样定义的: 第一根棍子的准备时间为1分钟: 如果刚处理 ...

  9. 7-9 旅游规划 (25 分)(Dijkstra算法)

    题意: ​ 思路:单源最短路问题,Dijkstra算法搞定就可以了,因为要找出最便宜的最短路,所以需要在更新最短距离的时候加一个条件(即当最短距离相等的时候,如果该路径的花费更小,就更新最小花费)就可 ...

  10. 我理解的数据结构(二)—— 栈(Stack)

    我理解的数据结构(二)-- 栈(Stack) 一.栈基础 栈是一种线性结构 相比较数组,栈对应的操作是数组的子集 只能从一端添加元素,也只能从同一端取出元素,这一端称为栈顶 栈是一种后进先出的数据结构 ...