火龙果软件Linux驱动开发培训6汇编_第1页
火龙果软件Linux驱动开发培训6汇编_第2页
火龙果软件Linux驱动开发培训6汇编_第3页
火龙果软件Linux驱动开发培训6汇编_第4页
火龙果软件Linux驱动开发培训6汇编_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Thesuccess'sroadLinux设备驱动高级开发今天的内容嵌入式显示设备简介帧缓冲(framebuffer)设备特点帧缓冲驱动程序显示原理帧缓冲驱动程序与DMA配合硬件图形加速简介使用高级图形库嵌入式显示设备TTL接口液晶模块CRT接口显示器FRAMEBUFFER驱动程序简介Framebuffer驱动程序提供图形硬件的抽象访问机制它提供给图形应用程序一个定义良好的接口,隐藏了底层硬件的细节。图形应用程序无需了解硬件寄存器,时序等信息FRAMEBUFFER驱动程序特点FRAMEBUFFER为应用程序提供了访问显卡的接口FRAMEBUFFER驱动程序可以作为普通memory类型的设备,用户可以直接读写设备的内容。比如cp/dev/fb0screenshot,即是把fb0的内容拷贝到截图文件中FRAMEBUFFER驱动程序特点(2)FRAMEBUFFER驱动程序实现上,类似于/dev/mem设备。他支持read,write,seek和mmap。mmap()是使用framebuffer的主要方式framebuffer使用显示设备中的帧内存,区别于/dev/mem设备使用这个主内存另外framebuffer支持一些特定的ioctl,主要用来获得设备信息和设置设备参数。比如我们访问调色板就是通过ioctl操作fb设备的工具fbsetfb设备的几何信息通过fbset工具来查询和修改fb设备支持一系列视频模式,每个模式包含屏幕的长宽尺寸、颜色深度、像素格式(pixelpacket)、时序信息fb驱动重要数据结构structfb_fix_screeninfo{…};用来描述设备有关,不可变更的信息。用户可以使用FBIOGET_FSCREENINFO命令来获得这些信息结构包含主要的项unsignedlongsmem_start;描述缓冲区起始地址__u32smem_len;描述缓冲区长度__u32type;描述fb类型,比如是否是交错模式__u32visual;描述显示颜色是真彩色,伪彩色还是单色显示颜色的种类介绍Framebuffer支持几种颜色显示方式单色每个像素的颜色只有两种,非亮即暗,可以用一个bit来表示伪彩色每个像素显示的颜色通过可编程的颜色查找表(即调色板)来获得。每个颜色通过查找表的检索号来表示,查找表中颜色真正的RGB值被显示到屏幕上真彩色每一个颜色是由分别独立的red,green,blue三种颜色值来表示直接彩色每个颜色由三个独立的颜色检索来表示,每种颜色都有自己的查找表灰度灰度模式可以认为是伪彩色的一个变种,他的每种颜色的RGB分量值都是相同的重要数据结构(2)structfb_var_screeninfo该结构描述设备无关的,可更改的配置信息。应用程序可以使用FBIOGET_VSCREENINFO命令获得这些信息,使用FBIOPUT_VSCREENINFO命令写入这些信息主要的数据项包含__u32xres;__u32yres;__u32xres_virtual;__u32yres_virtual;__u32xoffset;__u32yoffset;以及屏幕四周的margin,像素时钟,同步等时序信息重要数据结构(3)structfb_cmap设备无关的调色板结构。用来描述调色板中的颜色主要数据项包括__u32start;描述调色板起始位置__u32len;描述总共颜色数__u16*red;红色的值__u16*green;绿色__u16*blue;蓝色__u16*transp;透明度重要数据结构(4)驱动程序s3c2410fb.c实现了和硬件相关的方法,并负责填充必要的fb结构staticstructfb_opss3c2410fb_ops={ owner: THIS_MODULE, fb_get_fix: s3c2410fb_get_fix, fb_get_var: s3c2410fb_get_var, fb_set_var: s3c2410fb_set_var, fb_get_cmap: s3c2410fb_get_cmap, fb_set_cmap: s3c2410fb_set_cmap,然后调用intregister_framebuffer(structfb_info*fb_info);将fb驱动注册到系统中fbmem.cstaticstructfile_operationsfb_fops={ owner: THIS_MODULE, read: fb_read, write: fb_write, ioctl: fb_ioctl, mmap: fb_mmap, open: fb_open, release: fb_release,};registered_fb[]重要数据结构(4)fb_ioctl(structinode*inode,structfile*file,unsignedintcmd, unsignedlongarg){ intfbidx=GET_FB_IDX(inode->i_rdev); structfb_info*info=registered_fb[fbidx]; structfb_ops*fb=info->fbops;FBIOGET_VSCREENINFO fb->fb_get_varFBIOPUT_VSCREENINFO fb->fb_set_varFBIOGET_FSCREENINFO fb->fb_get_fix重要数据结构(5)structfb_info该结构描述了fb设备的各种信息和API调用。它的项包括了前述的几个关键结构,事件队列,设备映射的虚拟地址,标志和状态以及fb设备实现的fbopsstructfb_info{charname[];intopen;structfb_var_screeninfovar;structfb_fix_screeninfofix;structfb_cmapcmap;structfb_ops*fops;char*screen_base;}Fb驱动各核心部分介绍FRAMEBUFFER驱动程序核心部分包含fbmem.c,fbmon.c,fbcmap.c,fbsys.c,modedb.c几个文件fbmem.c文件实现了fb驱动公共的调用intregister_framebuffer(structfb_info*fb_info);intunregister_framebuffer(structfb_info*fb_info);调色板实现fbcmap.c文件实现了和调色板相关的调用intfb_alloc_cmap(structfb_cmap*cmap,intlen,inttransp);分配一个fb_cmap结构的颜色值存储空间voidfb_dealloc_cmap(structfb_cmap*cmap);intfb_copy_cmap(structfb_cmap*from,structfb_cmap*to);完全复制一个fb_cmap结构intfb_set_cmap(structfb_cmap*cmap,structfb_info*info);将一个fb_cmap结构设置为fb设备的调色板显视器参数fbmon.c文件用来解析显示器的edid并计算时序参数它实现了以下函数intfb_get_mode(intflags,u32val,structfb_var_screeninfo*var,structfb_info*info);使用VESAGTF公式来计算时序参数intfb_validate_mode(conststructfb_var_screeninfo*var,structfb_info*info);将fb_var_screeninfo参数和显示器的显示能力进行对比,检验显示器是否能够支持该显示模式显示模式modedb.c文件包含了所有的VESA标准显示模式信息它定义了一个静态数组,每一项是一个fb_videomode类型,表示一个特定的显示模式staticconststructfb_videomodemodedb[];他提供了下列调用intfb_add_videomode(structfb_videomode*mode,structlist_head*head);加入一个新的模式voidfb_delete_videomode(structfb_videomode*mode,structlist_head*head);删除一个模式voidfb_videomode_to_var(structfb_var_screeninfo*var,structfb_videomode*mode);将视频模式fb_videomode类型转换成fb_var_screeninfo类型voidfb_var_to_videomode(structfb_videomode*mode,structfb_var_screeninfo*var);将fb_var_screeninfo类型转换成fb_videomode类型区域拷贝cfbcopyarea.c文件实现了缓冲区中区域拷贝所需的函数首先我们初始化一个结构,描述区域拷贝的参数structfb_copyarea{ __u32dx; __u32dy; __u32width; __u32height; __u32sx; __u32sy;};然后调用voidcfb_copyarea(structfb_info*p,conststructfb_copyarea*area);该函数调用底层调用完成二维的拷贝矩形填充cfbfillrect.c文件实现了向缓冲区中一个指定矩形区域进行填充的方法首先我们也要初始化一个描述填充操作的结构structfb_fillrect{ __u32dx; __u32dy; __u32width; __u32height; __u32color; __u32rop;};然后调用voidcfb_fillrect(structfb_info*p,conststructfb_fillrect*rect);位图操作cfbimgblt.c文件实现了位图clipping操作首先初始化一个描述位图剪辑的结构structfb_image{ __u32dx; __u32dy; __u32width; __u32height; __u32fg_color; __u8depth; constchar*data; structfb_cmapcmap;};然后调用voidcfb_imageblit(structfb_info*p,conststructfb_image*image);函数将位图绘制到缓冲区中软件光标softcursor.c文件实现了软件光标首先需要初始化软件光标结构structfb_cursor{ __u16set; /*whattoset*/ __u16enable; /*cursoron/off*/ __u16rop; /*bitopoperation*/ constchar*mask; /*cursormaskbits*/ structfbcurposhot; /*cursorhotspot*/ structfb_image image; /*Curs

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论