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