framebuffer测试程序.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
framebuffer帧缓冲framebuffer简介??????? 帧缓冲(framebuffer)是Linux为显示设备提供的一个接口,把显存抽象后的一种设备,他允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。framebuffer是LCD对应的一中HAL(硬件抽象层),提供抽象的,统一的接口操作,用户不必关心硬件层是怎么实施的。这些都是由Framebuffer设备驱动来完成的。 ??????? 帧缓冲设备对应的设备文件为/dev/fb*,如果系统有多个显示卡,Linux下还可支持多个帧缓冲设备,最多可达32个,分别为/dev/fb0到 /dev/fb31,而/dev/fb则为当前缺省的帧缓冲设备,通常指向/dev/fb0,在嵌入式系统中支持一个显示设备就够了。帧缓冲设备为标准字符设备,主设备号为29,次设备号则从0到31。分别对应/dev/fb0-/dev/fb31。通过/dev/fb,应用程序的操作主要有这几种: 1. 读/写(read/write)/dev/fb:相当于读/写屏幕缓冲区。 2. 映射(map)操作:由于Linux工作在保护模式,每个应用程序都有自己的虚拟地址空间,在应用程序中是不能直接访问物理缓冲区地址的。而帧缓冲设备可以通过mmap()映射操作将屏幕缓冲区的物理地址映射到用户空间的一段虚拟地址上,然后用户就可以通过读写这段虚拟地址访问屏幕缓冲区,在屏幕上绘图了。 3. I/O控制:对于帧缓冲设备,对设备文件的ioctl操作可读取/设置显示设备及屏幕的参数,如分辨率,屏幕大小等相关参数。ioctl的操作是由底层的驱动程序来完成的。在应用程序中,操作/dev/fb的一般步骤如下: 1. 打开/dev/fb设备文件。 2. 用ioctl操作取得当前显示屏幕的参数,根据屏幕参数可计算屏幕缓冲区的大小。 3. 将屏幕缓冲区映射到用户空间。 4. 映射后即可直接读写屏幕缓冲区,进行绘图和图片显示。图二 用户空间访问帧缓冲设备流程 framebuffer相关数据结构介绍1. fb_info结构体:帧缓冲设备中最重要的数据结构体,包括了帧缓冲设备属性和操作的完整性属性。2. fb_ops结构体:fb_info结构体的成员变量,fb_ops为指向底层操作的函数的指针。3.fb_var_screen和fb_fix_screen结构体:fb_var_screen记录用户可以修改的显示控制器参数,fb_fix_screen记录用户不能修改的显示控制器参数。具体的结构体参数还有其他相关结构体在这就不做赘述了。帧缓冲设备驱动的程序结构?? 图一 帧缓冲设备驱动的程序结构??????? 上图为Linux帧缓冲设备驱动的主要结构,上层为用户空间,中间为内核空间,下面为硬件层。帧缓冲设备的提供给用户空间的file_operations结构体有fbmem.c中的file_operations提供(帧缓冲设备驱动的文件操作已经在femem.c中被用以实现,一般不需要有驱动工程师再编写)。而特定帧缓冲设备fb_info结构体的注册、注销以及其他操作由对应的***fb.c文件实现。fb_ops中的成员函数最终会操作LCD控制器硬件寄存器。编写驱动的主要工作也是实现针对设备fb_info中的fb_ops的成员函数。framebuffer测试程序背光检测测试步骤:LCD背光灯关闭,持续5秒,然后再打开背光灯。观察液晶屏背光亮灭变化,亮–灭—亮表示背光正常,否则不合格。大概思路:本次测试的板子分辨率为240*320,在/dev/目录下面有个backlight设备,只要将其值修改为0,背光灯就会关闭,改为1背光灯就打开。测试时先打开背光灯,持续5秒,再打开背光灯,观察测试结果。坏点检测测试步骤:全黑屏状态,持续5秒,恢复全白屏。若液晶屏全黑、全白条件下,若黑点个数≤3个为良品,否则不合格。大概思路:先打开帧缓冲设备,然后获取屏幕参数,计算缓冲区大小,将缓冲区填充成黑色,映射到用户空间,显示五秒,接着将缓冲区填充成白色,在映射到用户空间,显示五秒,观察LCD显示的结果。关键代码:#include linux/fb.h int main() { ???? int fb = 0; ???? struct fb_var_screeninfo vinfo; ???? struct fb_fix_screeninfo finfo; ???? long int screensize = 0; ???? char *fb_mem=0; ???? /*打开设备文件*/ ???? fb = open(/dev/fb0, O_RDWR); ???? /*取得屏幕相关参数*/ ???? ioctl(fbfd, FBIOGET_FSCREENINFO, finfo

文档评论(0)

kehan123 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档