《[精选]显示设备接口与帧缓冲概述.pptx》由会员分享,可在线阅读,更多相关《[精选]显示设备接口与帧缓冲概述.pptx(42页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、显示设备接口与帧缓冲显示设备接口与帧缓冲1LCD接口设计接口设计LCDLCD显示模块显示模块 液晶显示是一种被动的显示,它不能发光,只能使用周围环境的光。它显示图案或字符只需很小能量。液晶显示所用的液晶材料是一种兼有液态和固体双重性质的有机物,它的棒状结构在液晶盒内一般平行排列,但在电场作用下能改变其排列方向。LCDLCD的背光:的背光:lEL场致发光:2000-3000小时lLED光源:50000小时l新CCFL:60000小时2LCD的显示方式的显示方式l反射型LCD:底偏光片后面加了一块反射板,它一般在户外和光线良好的办公室使用。l透射型LCD:底偏光片是透射偏光片,它需要连续使用背光源
2、,一般在光线差的环境使用。l透反射型LCD:是处于以上两者之间,底偏光片能局部反光,一般也带背光源,光线好的时候,可关掉背光源;光线差时,可点亮背光源使用LCD。3常见的液晶显示器物理结构常见的液晶显示器物理结构l扭曲向列型TNTwisted Nematicl超扭曲向列型STNSuper TNl双层超扭曲向列型DSTNDual Scan Tortuosity Nomographl薄膜晶体管型TFTThin Film Transistor其中TNLCD、STNLCD和DSYNLCD的基本显示原理都相同,只是液晶分子的扭曲角度不同而已。而TFTLCD则采用截然不同的显示方式。4LCD通常由两种方式
3、l一种是带有LCD扫描芯片的LCD模块l一种是通过LCD控制器,直接扫描LCD屏。比方:S3C2410处理器,带有LCD控制器,显示缓存和系统内存公用。可以支持STN彩色/灰度和TFT两种模式的LCD。TFT模式下最多支持24位色,800 x600分辨率。LCD的驱动方式的驱动方式5嵌入式处理器与嵌入式处理器与LCD的连接的连接嵌入嵌入式式处理器理器LCD模模块数据数据总线寄存器寄存器选择使能信号使能信号有有LCD控制控制器的嵌入式器的嵌入式处理器理器LCDLCD控制信控制信号号线6片外的片外的LCD控制器控制器 7集成了LCD控制器的嵌入式处理器体系结构 8典型的典型的LCD模式信号线模式信
4、号线lLDD,数据线lL_PCLK,点时钟lL_LCLK,行频lL_FCLK,帧频lL_BIAS,CSTN的AC信号,TFT的开启信号9S3C2410的的LCD扫描模式扫描模式l4/8位,单/双扫描模式,CSTNl最多256级灰度l显示缓冲区支持15、16、24位TFT模式l支持RGB格式104位单扫描位单扫描STN模式模式114位单扫描显示缓冲的对应关系位单扫描显示缓冲的对应关系l1个字节存储两个点的信息l16级灰度128位位CSTN屏幕点阵:屏幕点阵:320 x240138位单扫描位单扫描CSTN模式模式148位单扫描显示缓冲的对应关系位单扫描显示缓冲的对应关系l1个字节存储1个点的信息l
5、可以是用调色板标准映射:1516位单扫描位单扫描TFT模式模式1616/15位显示缓冲的对应关系位显示缓冲的对应关系17Linux系统下系统下Framebuffer设备设备l帧缓冲framebuffer是 Linux 为显示设备提供的一个接口,把显存抽象后的一种设备,他允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。这种操作是抽象的,统一的。用户不必关心物理显存的位置、换页机制等等具体细节。这些都是由Framebuffer 设备驱动来完成的。l嵌入式系统下大多采用Framebuffer设备来实现显示设备LCD驱动。18Linux系统下系统下Framebuffer设备设备Framebu
6、ffer在系统中的位置Linux KernelFramebufferVFS虚拟文件系统系统调用虚拟文件系统系统调用VGA LCDGUI LIBUser Application 19Linux系统下系统下Framebuffer设备设备帧缓冲设备对应的设备文件为/dev/fb*,如果系统有多个显示卡,Linux 下还可支持多个帧缓冲设备,最多可达 32 个,分别为/dev/fb0 到/dev/fb31,而/dev/fb 则为当前缺省的帧缓冲设备,通常指向/dev/fb0。当然在嵌入式系统中支持一个显示设备就够了。帧缓冲设备为标准字符设备,主设备号为29,次设备号则从0到31。分别对应/dev/fb
7、0到/dev/fb31。20Framebuffer驱动结构驱动结构lFrameBuffer设备驱动基于如下两个文件:linux/include/linux/fb.hlinux/drivers/video/fbmem.cl与平台相关的设备驱动文件:linux/drivers/video/s3c-fb.c21Framebuffer驱动结构驱动结构FrameBuffer帧缓冲的重要数据结构:fb_infofb_var_screeninfo fb_fix_screeninfofb_cmap fb_ops在fb.h中定义22Framebuffer驱动结构驱动结构 struct fb_info int n
8、ode;int flags;struct fb_var_screeninfo var;/*Current var*/struct fb_fix_screeninfo fix;/*Current fix*/struct fb_monspecs monspecs;/*Current Monitor specs*/;该结构是LINUX系统定义的framebuffer设备驱动接口。定义了当前显卡framebuffer设备状态,一个显卡可能有两个framebuffer,在这种情况下,就需要两个fb_info结构。这个结构是唯一在内核空间可见的。在这个结构中有一个fb_ops指针,指向驱动设备工作所需的函
9、数集。23Framebuffer驱动结构驱动结构 struct fb_fix_screeninfo char id16;/*identification string eg TT Builtin*/unsigned long smem_start;/*Start of frame buffer mem*/*physical address*/_u32 smem_len;/*Length of frame buffer mem*/_u32 type;/*see FB_TYPE_*/_u32 visual;/*see FB_VISUAL_*/;该结构用来描述设备无关,不可变更的信息。可以使用FBI
10、OGET_FSCREENINFO 命令来获取该结构相应信息。24Framebuffer驱动结构驱动结构 struct fb_var_screeninfo _u32 xres;/*visible resolution */_u32 yres;_u32 xres_virtual;/*virtual resolution */_u32 yres_virtual;_u32 xoffset;/*offset from virtual to visible*/_u32 yoffset;;该结构用来描述设备无关,用户可变更的信息。可以使用FBIOGET_VSCREENINFO 命令来获取该结构相应信息,使用
11、FBIOPUT_VSCREENINFO 命令来设置该结构相应信息。25Framebuffer驱动结构驱动结构struct fb_cmap _u32 start;/*First entry */_u32 len;/*Number of entries*/_u16*red;/*Red values */_u16*green;_u16*blue;_u16*transp;/*transparency,can be NULL*/;该结构描述设备无关的颜色映射信息。可以通过FBIOGETCMAP和FBIOPUTCMAP 对应的ioctl操作设定或获取颜色映射信息.26Framebuffer驱动APIlLi
12、nux系统中对帧缓冲设备的操作是通过,fb_ops结构来完成和定义的。用户可以通过ioctl接口来完成对fb_ops结构中定义的功能函数的调用。帧缓冲驱动程序的主要工作就是编写fb_ops结构中的接口函数。27Framebuffer驱动驱动APIstruct fb_ops /*open/release and usage marking*/struct module*owner;int*fb_openstruct fb_info*info,int user;int*fb_releasestruct fb_info*info,int user;ssize_t*fb_readstruct fb_i
13、nfo*info,char _user*buf,size_t count,loff_t*ppos;ssize_t*fb_writestruct fb_info*info,const char _user*buf,size_t count,loff_t*ppos;int*fb_mmapstruct fb_info*info,struct vm_area_struct*vma;int*fb_ioctlstruct fb_info*info,unsigned int cmd,unsigned long arg;28Framebuffer驱动驱动APIlfb_ops结构中常见的接口函数:lfb_ope
14、n:翻开帧缓冲设备lfb_release:关闭帧缓冲设备lfb_read:帧缓冲设备的读操作lfb_write:帧缓冲设备的写操作lfb_mmap:帧缓冲设备的内存映射操作lfb_ioctl:帧缓冲设备的ioctl操作29Framebuffer帧缓冲内核驱动核心帧缓冲内核驱动核心lfbmem.c 实现了如下函数.register_framebufferstruct fb_info*fb_info;unregister_framebufferstruct fb_info*fb_info;l这两个是提供给下层FrameBuffer设备驱动的接口,设备驱动通过这两函数向系统注册或注销自己。几乎底层设
15、备驱动所要做的所有事情就是填充fb_info结构然后向系统注册或注销它。30Framebuffer帧缓冲设备驱动程序分析帧缓冲设备驱动程序分析内核源码目录driver/video/下的s3c-fb.c文件是S5PV210处理器帧缓冲设备硬件相关的驱动程序。s3c-fb.c驱动程序主要完成以下工作:l初始化LCD控制器、设置显示模式、分配显示缓存。l分配并初始化fb_info结构,填充其成员函数。l调用 register_framebufferstruct fb_info*fb_info,函数向系统注册帧缓冲设备驱动程序。31Linux内核对内核对framebuffer帧缓冲的支持帧缓冲的支持L
16、inux内核对framebuffer帧缓冲设备有着良好的支持。make menuconfig配置菜单:-Device Drivers -Graphics support -Support for frame buffer devices FB=y32Linux内核对内核对framebuffer帧缓冲的支持帧缓冲的支持 Support for frame buffer devices -33Linux内核对内核对framebuffer帧缓冲的支持帧缓冲的支持 Samsung S3C framebuffer support34Framebuffer帧缓冲设备的操作帧缓冲设备的操作 应用程序对fra
17、mebuffer帧缓冲设备的操作有以下几种:读/写读/写read/write/dev/fb:相当于读/写屏幕缓冲区。例如:用 cp/dev/fb0 tmp 命令可将当前屏幕的内容拷贝到一个文件中,而命令 cp tmp /dev/fb0 则将图形文件tmp显示在屏幕上。35Framebuffer帧缓冲设备的操作帧缓冲设备的操作映射map操作:由于 Linux 工作在保护模式,每个应用程序都有自己的虚拟地址空间,在应用程序中是不能直接访问物理缓冲区地址的。为此,Linux 在文件操作 file_operations 结构中提供了 mmap 函数,可将文件的内容映射到用户空间。对于帧缓冲设备,则可通
18、过映射操作,可将屏幕缓冲区的物理地址映射到用户空间的一段虚拟地址中,之后用户就可以通过读写这段虚拟地址访问屏幕缓冲区,在屏幕上绘图了。36Framebuffer帧缓冲设备的操作帧缓冲设备的操作IO操作:对于帧缓冲设备,对设备文件的 ioctl操作可读取/设置显示设备及屏幕的参数,如分辨率,显示颜色数,屏幕大小等等。ioctl 的操作是由底层的驱动程序来完成的。例如:ioctlfbfd,FBIOGET_FSCREENINFO,&finfo获取fb_fix_screeninfo结构的信息,在linux/include/linux/fb.h定义。ioctlfbfd,FBIOGET_VSCREENIN
19、FO,&vinfo获取fb_var_screeninfon结构的信息。在linux/include/linux/fb.h定义。37Framebuffer帧缓冲设备的操作l在应用程序中,操作/dev/fb的一般步骤如下:1翻开/dev/fb设备文件。2用 ioctrl 操作取得当前显示屏幕的参数,如屏幕分 辨率,每个像素点的比特数。根据屏幕参数可计算屏幕缓冲区的大小。3将屏幕缓冲区映射到用户空间mmap。4映射后就可以直接读写屏幕缓冲区,进行绘图和图片显示了。38Framebuffer帧缓冲设备的操作Framebuffer操作典型程序 int main int fb=0;void*fb_mem;
20、struct fb_var_screeninfo vinfo;struct fb_fix_screeninfo finfo;long int screensize=0;/*翻开设备文件*/fb=open/dev/fb0,O_RDWR;/*取得屏幕相关参数*/ioctlfb,FBIOGET_FSCREENINFO,&finfo;ioctlfb,FBIOGET_VSCREENINFO,&vinfo;/*计算屏幕缓冲区大小*/screensize=vinfo.xres*vinfo.yres*vinfo.bits_per_pixel/8;/*映射屏幕缓冲区到用户地址空间*/fb_mem=char*mm
21、ap0,screensize,PROT_READ|PROT_WRITE,MAP_SHARED,fb,0;/*下面可通过 fbp指针读写缓冲区*/*释放缓冲区,关闭设备*/munmapfb_mem,screensize;closefb;39基于基于Framebuffer设备的图形系统应用设备的图形系统应用流行的Linux桌面图形系统X Windows SystermGnomeKdeMozilla40基于基于Framebuffer设备的图形系统应用设备的图形系统应用嵌入式系统由于自身硬件资源及成本的限制,导致无法运行资源消耗比较大的大型图形系统。随着嵌入式Linux系统市场需求的不断状态,许多商业
22、和开源的工程陆续开始对嵌入式Linux系统支持。QT/Embedded、QtopiaMiniGUIMicrowindows Nano-XGtkFBDirectFB419、静夜四无邻,荒居旧业贫。4月-234月-23Wednesday,April 19,202310、雨中黄叶树,灯下白头人。15:21:2115:21:2115:214/19/2023 3:21:21 PM11、以我独沈久,愧君相见频。4月-2315:21:2115:21Apr-2319-Apr-2312、故人江海别,几度隔山川。15:21:2115:21:2115:21Wednesday,April 19,202313、乍见翻疑
23、梦,相悲各问年。4月-234月-2315:21:2115:21:21April 19,202314、他乡生白发,旧国见青山。19 四月 20233:21:21 下午15:21:214月-2315、比不了得就不比,得不到的就不要。四月 233:21 下午4月-2315:21April 19,202316、行动出成果,工作出财富。2023/4/19 15:21:2115:21:2119 April 202317、做前,能够环视四周;做时,你只能或者最好沿着以脚为起点的射线向前。3:21:21 下午3:21 下午15:21:214月-239、没有失败,只有暂时停止成功!。4月-234月-23Wedn
24、esday,April 19,202310、很多事情努力了未必有结果,但是不努力却什么改变也没有。15:21:2115:21:2115:214/19/2023 3:21:21 PM11、成功就是日复一日那一点点小小努力的积累。4月-2315:21:2115:21Apr-2319-Apr-2312、世间成事,不求其绝对圆满,留一份缺乏,可得无限完美。15:21:2115:21:2115:21Wednesday,April 19,202313、不知香积寺,数里入云峰。4月-234月-2315:21:2115:21:21April 19,202314、意志坚强的人能把世界放在手中像泥块一样任意揉捏。
25、19 四月 20233:21:21 下午15:21:214月-2315、楚塞三湘接,荆门九派通。四月 233:21 下午4月-2315:21April 19,202316、少年十五二十时,步行夺得胡马骑。2023/4/19 15:21:2115:21:2119 April 202317、空山新雨后,天气晚来秋。3:21:21 下午3:21 下午15:21:214月-239、杨柳散和风,青山澹吾虑。4月-234月-23Wednesday,April 19,202310、阅读一切好书如同和过去最杰出的人谈话。15:21:2215:21:2215:214/19/2023 3:21:22 PM11、越
26、是没有本领的就越加自命非凡。4月-2315:21:2215:21Apr-2319-Apr-2312、越是无能的人,越喜欢挑剔别人的错儿。15:21:2215:21:2215:21Wednesday,April 19,202313、知人者智,自知者明。胜人者有力,自胜者强。4月-234月-2315:21:2215:21:22April 19,202314、意志坚强的人能把世界放在手中像泥块一样任意揉捏。19 四月 20233:21:22 下午15:21:224月-2315、最具挑战性的挑战莫过于提升自我。四月 233:21 下午4月-2315:21April 19,202316、业余生活要有意义,不要越轨。2023/4/19 15:21:2215:21:2219 April 202317、一个人即使已登上顶峰,也仍要自强不息。3:21:22 下午3:21 下午15:21:224月-23MOMODA POWERPOINTLorem ipsum dolor sit amet,consectetur adipiscing elit.Fusce id urna blandit,eleifend nulla ac,fringilla purus.Nulla iaculis tempor felis ut cursus.感感 谢谢 您您 的的 下下 载载 观观 看看专家告诉