电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

lcd设备驱动之全解析VIP专享VIP免费

lcd设备驱动之全解析_第1页
lcd设备驱动之全解析_第2页
lcd设备驱动之全解析_第3页
第1页共53页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第1页共53页linux中LCD设备驱动(1)——framebuffer(帧缓冲)1、framebuffer帧缓冲帧缓冲(framebuffer)是Linux系统为显示设备提供的一个接口,它将显示缓冲区抽象,屏蔽图像硬件的底层差异,允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。用户不必关心物理显示缓冲区的具体位置及存放方式,这些都由帧缓冲设备驱动本身来完成。framebuffer机制模仿显卡的功能,将显卡硬件结构抽象为一系列的数据结构,可以通过framebuffer的读写直接对显存进行操作。用户可以将framebuffer看成是显存的一个映像,将其映射到进程空间后,就可以直接进行读写操作,写操作会直接反映在屏幕上。framebuffer是个字符设备,主设备号为29,对应于/dev/fb%d设备文件。通常,使用如下方式(前面的数字表示次设备号)0=/dev/fb0第一个fb设备1=/dev/fb1第二个fb设备fb也是一种普通的内存设备,可以读写其内容。例如,屏幕抓屏:cp/dev/fb0myfilefb虽然可以像内存设备(/dev/mem)一样,对其read,write,seek以及mmap。但区别在于fb使用的不是整个内存区,而是显存部分。2、fb与应用程序的交互对于用户程序而言,它和其他的设备并没有什么区别,用户可以把fb看成是一块内存,既可以向内存中写数据,也可以读数据。fb的显示缓冲区位于内核空间,应用程序可以把此空间映射到自己的用户空间,在进行操作。在应用程序中,操作/dev/fbn的一般步骤如下:(1)打开/dev/fbn设备文件。(2)用ioctl()操作取得当前显示屏幕的参数,如屏幕分辨率、每个像素点的比特数。根据屏幕参数可计算屏幕缓冲区的大小。(3)用mmap()函数,将屏幕缓冲区映射到用户空间。(4)映射后就可以直接读/写屏幕缓冲区,进行绘图和图片显示了。3、fb的结构及其相关结构体第2页共53页第1页共53页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第2页共53页在linux中,fb设备驱动的源码主要在Fb.h(linux2.6.28\include\linux)和Fbmem.c(linux2.6.28\drivers\video)两个文件中,它们是fb设备驱动的中间层,为上层提供系统调用,为底层驱动提供接口。在fb.h文件中有fb驱动需要使用的很多结构,我们先对这些结构体进行说明:本章共介绍5个结构体:(1)、structfb_info结构体(2)、structfb_ops结构体(3)、structfb_fix_screeninfo结构体(4)、structfb_var_screeninfo结构体(5)、structfb_cmap结构体(1)、structfb_info结构体介绍第3页共53页第2页共53页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第3页共53页一个帧缓冲区对应一个structfb_info结构,它包括了帧缓冲设备的属性和操作的完整集合,每个帧设备都有一个fb_info结构体。源码如下:structfb_info{intnode;intflags;structmutexlock;/*Lockforopen/release/ioctlfuncs*/互斥锁structfb_var_screeninfovar;/*Currentvar*/当前缓冲区的可变参数structfb_fix_screeninfofix;/*Currentfix*/固定参数structfb_monspecsmonspecs;/*CurrentMonitorspecs*/当前显示器标志structwork_structqueue;/*Framebuffereventqueue*/帧缓冲事件队列structfb_pixmappixmap;/*Imagehardwaremapper*/图像硬件mapperstructfb_pixmapsprite;/*Cursorhardwaremapper*/光标硬件mapperstructfb_cmapcmap;/*Currentcmap*/当前的调色板structlist_headmodelist;/*modelist*/structfb_videomode*mode;/*currentmode*/当前的视频模式#ifdefCONFIG_FB_BACKLIGHT如果配置了LCD支持背光灯/*assignedbacklightdevice*//*setbeforeframebufferregistration,removeafterunregister*/背光调整structbacklight_device*bl_dev;/*Backlightlevelcurve*/structmutexbl_curve_mutex;u8bl_curve[FB_BACKLIGHT_LEVELS];#endif#ifdefCONFIG_FB_DEFERRED_IOstructdelayed_workdeferred_work;structfb_deferred_io*fbdefio;#endifstructfb_ops*fbops;帧缓冲操作函数集structdevice*device;/*Thisistheparent*/父设备structdevice*dev;/*Thisisthisfbdevice*/fb设备intclass_flag;/*privatesysfsflags*/私有的sys...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

中小学文库+ 关注
实名认证
内容提供者

精品资料应用尽有

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部