- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
WINCE6.0显示驱动模型介绍.docx
WINCE6.0显示驱动模型介绍
********************************LoongEmbedded************************作者:LoongEmbedded(kandi)时间:2011.06.04类别:WINCE驱动开发********************************LoongEmbedded************************
关键字
DDGPE的DD是指DirectDraw,Graphics Primitive Engine (GPE)
GDI:Graphics Device Interface
DDI:Display Device Interface
在WinCE6.0中,Display驱动由GWES模块来管理(GWES.dll)。WinCE提供了两种架构的Display驱动模型,可以满足不同的硬件需求。一种是基于WinCE DDI的Display驱动模型,另一种是基于DirectDraw的Display驱动模型。
WINCE6.0显示驱动模型
图1
DDI显示驱动模型
图2
本文是基于DDI的模型来学习的,但此6410D的BSP是基于基类DDGPE来实现对目标硬件的控制的。
DDRAW显示驱动模型
图3
DirectDraw提供了独立于硬件的直接访问显示设备的能力。它可以通过直接访问硬件抽象层(HAL)中的一些函数来达到直接操作显示设备的目的,在这个过程中,不再需要图形设备接口(GDI)的转换。这种直接的方法可以使图像更加连贯,也提高了显示的性能。为了实现这样的功能,需要在显示驱动上扩展能够直接访问相关硬件的函数。这些函数会被DirectDraw模块调用,并形成DirectDraw的硬件抽象层(DDHAL)。
DirectDraw的真正实现代码都驻在gwes.dll模块中,应用程序只是连接了一个小的客户端,被称为 HYPERLINK /product/searchfile/5050.html \t _blank DDRAW.dll代理,该代理主要负责用户进程与系统之间的远程DirectDraw COM接口连接。这样,用户请求会被传送到内核的GWES模块中。针对DirectDraw,WinCE提供了一个名为DirectDraw的GPE库(DDGPE),它是从GPE类上面继承而来的。实际上,DirectDraw显示驱动是由DDGPE和DDHAL组成,而DDGPE中已经包含了DDHAL的功能。用户需要从DDGPE类继承并实现相关函数即可。GWES.dll模块中包含GDI和DDRAW两个组件,这两个组件会调用驱动中的DDGPE的相关接口完成对硬件的操作。
在上述两种架构中,用户可以根据自己的硬件情况选择相应的架构。第一种架构是基于GPE类继承来实现的,第二种架构是基于DDGPE类继承来实现的,而第二种架构的DDGPE类又是从第一种架构的GPE类继承而来。关于两种类的具体定义,可参见” \WINCE600\PUBLIC\COMMON\ HYPERLINK /data/iccompany/detail248.html \t _blank OAK\INC”路径下的gpe.h和ddgpe.h文件。
显示驱动的文件结构
图4
我们先来看看DISPLAY_DRV目录下的sources文件的下面部分:
图5
从图3可知s3c6410_disp.dll要调用这两个dll提供的函数接口来实现自己的功能。接下来看看VIDEO_DRV目录下的sources文件的下面部分:
图6
从图3可知s3c6410_Video.dll要调用这些lib提供的函数接口来实现自己的功能。为了搞清楚s3c6410_disp.dll和s3c6410_Video.dll之间的关系,我们看DISPLAY_DRV目录下的display_main.cpp(也就是s3c6410_disp.cpp)下的函数调用:S3C6410Disp::S3C6410Disp()-S3C6410Disp::AllocResource(),就来看此函数的相关部分:
图7
从图5可以知道s3c6410_Video.dll还是为s3c6410_disp.dll提供服务的。总结这些dll和lib之间的关系如下面的逻辑框图所示:
图8
显示驱动的具体实现
3.1显示驱动的加载
在GWES.dl被加载后,在加载驱动的过程中,GWES将根据注册表键HKEY_LOCAL_MACHINE\System\GDI\DisplayCandidates下面的项来找显示驱动,如果找到,则正常加载显示驱动,见platform.reg中相关部分:
图9
根据图9的注册表信息,GWES找到s3c6410_disp.dll并且加载,并且把
文档评论(0)