LCD驱动程序帧缓冲技术报告.docVIP

  • 2
  • 0
  • 约3.32万字
  • 约 29页
  • 2016-04-27 发布于湖北
  • 举报
LCD设备驱动程序 LCD是Liquid Crystal Display的简称,也就是经常所说的液晶显示器 LCD能够支持彩色图像的显示和视频的播放,是一种非常重要的输出设备 Framebuffer 是Linux系统为显示设备提供的一个接口,它将显示缓冲区抽象,屏蔽图像硬件的底层差异,允许上层应用程序在图形模式下直接对显示缓冲区进行操作 Framebuffer又叫帧缓冲,是Linux为操作显示设备提供的一个用户接口。用户应用程序可以通过Framebuffer透明地访问不同类型的显示设备。 从这个方面来说,Framebuffer是硬件设备显示缓冲区的抽象。Linux抽象出Framebuffer这个帧缓冲区可以供用户应用程序直接读写,通过更改Framebuffer中的内容,就可以立刻显示在LCD显示屏上 Framebuffer是显卡硬件的抽象: Framebuffer机制模仿显卡的功能,将显卡硬件结构抽象为一系列的数据结构,可以通过Framebuffer的读写直接对显存进行操作。用户可以将Framebuffer看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反映在屏幕上。这些操作是由抽象的,统一的。用户不必关心物理显存的位置、换页机制等具体细节。这些都是由Framebuffer设备驱动完成的 对于Framebuffer而言,只要在帧缓冲区中与显示点对应的区域写入颜色值,对应的颜色会自动在LCD屏幕上显示出来 Frambuffer 是标准的字符设备: Framebuffer 是一个标准的字符设备,主设备号是29,次设备号根据缓冲区 的数目而定。 Framebuffer 对应 /dev/fb%d 设备文件。根据显卡的多少,设备文件可能是/dev/fb0、/dev/sb1等。缓冲区设备也是一种普通的内存设备,可以直接对其进行读写。 例如:对屏幕进行抓屏,可以使用下面的命令: cp /dev/fb0 myfile.png 一个系统上有多个显示设备。例如一个系统上,又有一个独立的显卡,那么就有两个缓冲区设备文件/dev/fb1 和 /dev/fb2,应用程序利用它们来工作,向其中写入数据,就能够在屏幕上立刻看到显示的变化 Framebuffer与应用程序的交互: 在Linux中,Framebuffer是一种能够提取图形的硬件设备,是用户进入图形界面的很好接口。    Framebuffer是显存抽象后的一种设备,它允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。 这种操作是抽象的、统一的。 用户不必关系物理显存的位置、换页机制等具体细节 这些都由Framebuffer设备驱动程序来完成的 有了Framebuffer,用户程序不需要对底层的驱动深入了解就能够作出很好的图形 对用户程序而言,它和 /dev 下面的其他设备没有什么区别,用户可以把FrameBuffer看成一块内存,既可以写,又可以读。显示器将根据内存数据显示对应的图像界面。这一切都由LCD控制器和响应的驱动程序来完成 Framebuffer的显示缓冲区位于Linux的内核态地址空间。而在Linux中,每个应用程序都有自己的虚拟地址空间,在应用程序中是不能直接访问物理缓冲区的。为此,Linux在文件操作file_operations结构中提供了mmap()函数,可将文件的内容映射到用户空间。对应帧缓冲设备,则可以通过映射操作,将屏幕缓冲区(Framebuffer)的物理地址映射到用户空间的一段虚拟地址中,之后用户就可以通过读写这段虚拟地址访问屏幕缓冲区,在屏幕上绘图。 Framebuffer与应用程序的交互如下图: Framebuffer显示原理: 通过Framebuffer,应用程序用mmap()把显存映射到应用程序虚拟地址空间。帧缓冲设备主设备号29,次设备号从0到31.分别对应/dev/fd0 ~ /dev/fd31 简单地说:Framebuffer驱动的功能就是分配一块内存作为显存,然后LCD控制器的寄存器做一些设置。LCD显示器会不断地从显存中获取数据,并将其显示在LCD显示器上。LCD显示器可以显示显存中的一个区域或者整个区域。framebuffer驱动程序提供了操作显存的功能,例如复制显存、向显存中写入数据(画园,画方型等) 具体来说:实现这些操作的方法是,填充一个fbinfo结构,用register_framebuffer(fbinfo *)将fbinfo结构注册到内核,对于fbinfo结构,最主要的它的fs_ops成员,需要针对具体

文档评论(0)

1亿VIP精品文档

相关文档