基于Windows平台设备驱动模块的开发
- 格式:pdf
- 大小:362.10 KB
- 文档页数:5
PCI设备Windows通用驱动程序设计摘要通用高速PCI总线目标模块全面地讨论了Windows 设备驱动程序编写时所面临的主要问题及解决方案关键词经常要在机的软件中访问和控制硬件设备包括Windows95/98Windows 2000为了保证系统的安全性对应用程序访问硬件资源加以限制Windows下的驱动程序不仅仅包括物理设备的驱动程序为了简化问题本文将以撏ㄓ酶咚伲校茫勺芟吣勘昴探讨PCI设备的驱动程序设计方案它可以完成一般PCI设备驱动所需的功能Çý¶¯³ÌÐò²»»á¶ÀÁ¢µØ´æÔÚͨ¹ýÉ豸Çý¶¯³ÌÐò´Ó¶ø¿ÉÒÔʵÏÖ¶à½ø³Ì²¢ÐÐÔËÐн«µ÷ÓÃÉ豸Çý¶¯³ÌÐòµÄpc机程序称为用户程序所以大多数情况下驱动程序也不能通用一般至少要设计Windows 9X和Windows NT两个驱动程序版本同时它又推出一个新的Win32 Drivers Mode (WDM)驱动类型如USB 设备这个新的类型实际是在Windows NT的驱动模型的基础上增加了即插即用等内容先前叫Windows NT5.0´Ó³¤Ô¶µÄ½Ç¶È¿´µ«´ÓĿǰµÄÊг¡Çé¿öÀ´¿´ËùÒÔWDM在近一两年还无法替代其它类型的设备驱动0级2级和3级而用户程序运行在3级上具体的限制在不同的操作系统中是不同的Windows 95支持的驱动类型很多主要是VxD和打印机驱动两类VxD运行在Intel系统的0级上对任何I/O设备有全部访问权VxD驱动通常以放在Windows\System目录下也可以在程序运行时根据需要动态地载入但打印机驱动程序不是VxDͬWindows 95类似Kernel ModeUser Mode)之分PCI通用驱动程序要求对各种硬件资源访问开发设备驱动采用的主要开发工具是微软为设备开发者提供的软件包Device Driver Kit (DDK)±àÒëÐèÒªµÄÍ·ÎļþºÍ¿âÎļþÔÚDDK中还定义了一些设备驱动可以调用的系统底层服务中断服务可安装文件系统服务等等但Windows 95的DDK由于主要使用汇编语言描述因此VtoolsD是基于C/C++的使用和维护都较Windows DDK容易 PCI驱动程序的特点在设计驱动程序之前更需要详细了解硬件设备的特性需要了解的最主要的硬件特性包括设备的总线结构设备采用什么总线结构非常关键如ISA和PCIËùÒÔÇý¶¯³ÌÐòÉè¼ÆÒ²²»Í¬寄存器要了解设置的控制寄存器以及这些寄存器工作的特性设备错误和状态要了解如何判断设备的状态和错误信号port也就是通过CPU的IN/OUT指令进行数据读写但PCI规范不包括从属DMA的说明设备内存许多设备自身带有内存有的设备还要通过驱动程序设置设备的接口寄存器在DDK文档中有规定这是根据设备的不同而不同的但基本功能就是完成设备的初始化中断的设置如前面所说但驱动程序所要完成的工作却是相同的仅在需要的地方指出两个操作系统的不同ѰַPCI器件的资源和对PCI器件中断的服务所有软件扩展ROM码PCI BIOS规范有完整的有关PCI BIOS功能的描述[在PCI设备驱动程序的初始化过程中devicevendor indexͨ¹ýµ÷ÓÃPC IBIOS确认其存在总线号这是该器件利用总线号功能的PCI配置空间设备驱动就需要从配置空间获得硬件的参数包括所用的中断号存储器的地址存储器映射方式等读写配置空间可以调用BIOS中断1AHÔÙ¶ÔÅäÖÿռäÊý¾Ý¼Ä´æÆ÷(0CFCH)进行读写最重要的是获得基址寄存器(BADR)ϵͳ¿ÉÄÜ»á¸ù¾ÝÓ²¼þÇé¿öΪPCI设备分配新的资源而基址4是按内存方式映射的可以读对应端口的配置寄存器(Configuration Register)ÅÐ¶ÏÆä0位表示其是按内存方式设置的内存方式和I/O方式的配置寄存器的含义参见文献[如果要获得基址的大小然后读基址寄存器从第4位开始的0的数目表示基址的大小则从第2位开始的0的数目表示基址的大小查找PCI设备的工作是由HalGteBusData完成的但DDK推荐使用HaiGetBusDataOffset函数)端口操作在PC机上所以处理方法也不同它不象内存有实模式和保护模式之分在Windows 9X下而不一定非通过专门的驱动程序来完成甚至可以不用专门设计驱动程序由于PCI总线是32位的总线标准而且以前大多数C/C++编译软件都没有提供双字的函数在Windows NT下级的用户程序和用户模式驱动程序直接 使用I/O指令所以任何对I/O的操作都需要借助内核模式驱动来完成一是在驱动程序中使用IoReportResourceUsage报告资源占用PORTWRITEXXX函数读写另一种是驱动程序修改NT的I/OPermissions Map(IOPM)ÕâʱÓû§³ÌÐò²ÉÓÃͨ³£µÄI/O指令进行操作用户程序设计简单程序不能移植到非Intel的系统中±£»¤Ä£Ê½ÓëʵģʽµÄ¸ù±¾Çø±ðÔÚÓÚCPU寻址方式上的不同Windows采用了分段分页机制如图这样使应用程序产生一种错觉这样做最大的好处就是一个程序可以很容易地在物理内存容量不一样的编程人员使用虚拟存储器可以写出比任何实际配置的物理存储器都大得多的程序通过分段机制再通过分页机制线性地址被分割成页目录(Page Directory)µ±½¨Á¢Ò»¸öеÄWin32进程时并建立它自己的页目录页目录的地址也同时放入进程的现场信息中系统首先从CPU控制器CR3中读出页目录所在的地址再根据页表得到实际代码最后再根据页偏移访问特定的单元但应用程序读写的是虚拟地址从物理地址到线性地址的转换工作也是由驱动程序来完成的使用DDK的VMMCallÇý¶¯³ÌÐòµÄÄÚ´æÓ³É䲿·ÖÖ÷ÒªÊǵ÷ÓÃVxD的系统服务MapPhysToLinearPVOID MapPhysToLineag(CONST VOID * PhysAddr,DWORD nBytes,DWORD Flags);其中第一个参数PhysAddr就是要映射的内存的物理地址的起始位置Flags必须设置为0Èç¹ûÖ¸¶¨µÄÄÚ´æ²»ÄÜ´æÈ¡比如要映射物理内存ED000000H开始的4096个字节PCHAR *PointerToPage=(PCHAR)MapPhysToLinear((PVOID)OxED000000,4096,0);而将PointerToPage传递给调用驱动的用户程序而通过对这个指针的操作就可以实现对物理内存ED000000H进行读写首先调用IoReportResourceUsage请求使用设备的内存再使用MmMapIoSpace把设备的内存映射到虚拟空间调用MmUnmapIoSpace 断开设备的内存和虚拟空间的连接)中断的设置响应与调用应该在驱动程序中完成Int完成DDK还提供了响应中断事件的服务VPICD服务用来管理所有硬件中断事件对一个特定的IRQ中断源或者允许其它VxD重载中断处理函数要处理硬件中断应该从VHardwareInt继承一个类个类中在Windows NT中设备驱动首先使用HalGetInterrupuVector将与总线有关的中断向量转换为系统的中断向量×ÜÊÇÐèÒªÓÉÓû§³ÌÐòÀ´µ÷ÓÃÇý¶¯²¢ÊµÏÖÒ»¶¨µÄ¹¦Äܵõ½Ò»¸öÎļþ¾ä±úʹÓÃÈçϵÄÓï¾ä¾Í¿ÉÒÔ´ò¿ªÎļþµ÷ÓÃDeviceIoControl函数就可以同设备驱动程序交换数据了可以调用CloseHandle(hVxD)这种调用方式也是Windows NT调用设备驱动的标准方法如DPMI方式在两个操作系统下Íê³ÉÁ˶ÔÇý¶¯³ÌÐòµÄ³õ²½Éè¼Æ³ÌÐòÒ²²»Ì«ÈÝÒ×¾ßÓÐͨÓÃÐÔÔÚÓÐЩ¿ª·¢¹¤¾ßÖÐ不包括直接读写I/O端口的语句目前ActiveXDLL可以在大多数软件环境中进行调用VCL可以在Delphi和C++ Builder中使用所以也提供了C++类库方式 马卫国通用高速PCI总线目标模块的设计1999;25(1)±±¾©1997。
Windows驱动开发模型WDM学习笔记绪言 (4)1.WDM驱动程序开发基础知识 (5)1.1WDM简介:Win32 Driver Model Win32驱动程序模型 (5)1.2 Win32 API (5)1.3 WDM特性 (5)1.4 WDM工作原理 (6)1.5 WDM与其它驱动程序的比较 (6)2.WDM驱动程序开发环境DDK设备驱动程序开发包 (6)2.1■安装DDK (6)2.1.1.Windows 98 DDK的安装 (7)2.1.2.Windows 95 DDK的安装 (7)2.1.3.NT DDK的安装 (8)2.2 ■构造环境:建立WDM驱动程序构造环境的方法 (8)2.2.1. 用SETENV.bat来安装驱动程序构造环境 (9)2.2.2. 手工运行SETENV.bat (9)2.2.3. 构造WDM驱动程序 (9)2.2.4.构造驱动程序 (9)2.2.5.检查Windows 98 DDK的安装 (9)3.WDM驱动程序的设计与开发 (10)3.1■WDM 驱动程序的运作流程 (10)3.2■驱动程序设计 (10)3.3■驱动程序开发 (11)3.3.l.编写驱动程序框架 (11)3.3.2.测试驱动程序 (11)4.WDM驱动程序编译运行:编译和安装设备驱动程序的方法 (12)4.1■编译设备驱动程序的方法 (12)4.1.1.举例分析 (12)4.1.2.编译的基本步骤 (13)4.2■设备驱动程序的安装和启动 (13)4.2.1.添加注册表中的键值 (13)4.2.2.控制驱动程序的装入次序 (14)4.2.3.驱动程序的Start值 (14)4.2.4.修改注册表的方法 (15)4.2.5.启动设备驱动程序 (15)4.2.6.调试工具 (16)5.wdm驱动开发基础-一些需要注意的问题汇总 (16)5.1注册表的角色 (16)5.2.如何命名注册表键 (16)5.3从用户模式中访问设备键 (17)5.4 函数原型“IN”关键字 (17)5.5 注册设备接口 (18)5.6 初始化设备扩展 (18)5.7 注意侧效 (19)5.8 try-finally中的控制流程 (20)5.9 生成异常 (22)5.10 __Leave语句 (23)5.11 简化页大小 (24)5.12 页故障关于分页 (24)5.13 alloc_text的使用 (25)5.14 关于段布置 (26)5.15 服务函数描述 (26)5.16 ExAllocatePoolWithTag (28)5.17 ExAllocatePool的其它形式 (29)5.18 单链表 (30)5.19 lookaside链表的服务函数 (31)5.20 打开注册表键 (31)5.21 删除子键或键值 (32)5.22 枚举子键或键值 (33)5.23 IRQL限定 (35)5.24 IRQL的明确控制 (35)5.25 自旋锁 (36)6. wdm驱动开发基础代码分析解析 (36)绪言在Windows的不同版本上开发的驱动程序“模型”(模型这个词语应该来源于单词“Mode”。
Windows CE下设备驱动的研究与实践作者:高守生来源:《现代电子技术》2009年第22期摘要:介绍Windows CE及其特点,深入研究Windows CE本机设备驱动程序和流接口驱动程序模型及工作方法。
在多主总线模式下,根据S3C2440处理器的集成功能和接口模式,以S3C2440处理器的寄存器物理地址和虚拟地址来捆绑和配置总线控制器设计为例,着重阐述了嵌入式Windows CE流接口驱动程序的开发过程,为此类设备驱动的快速开发提供了很好的思路。
关键词:Windows CE;设备驱动中图分类号:TP3340 引言伴随着后PC时代的到来,人们越来越多地接触到一个新的概念即嵌入式技术。
嵌入式技术已被广泛地应用于科学研究、工程设计、军事技术,以及文艺商业等方方面面,成为后PC时代IT领域发展的主力军。
这也极大地刺激了嵌入式系统的发展和产业化的进程。
嵌入式操作系统作为嵌入式系统的核心,是连接嵌入式设备和应用的重要部件。
它一方面要支持各种功能及规格的硬件设备,另一方面要为各种应用程序提供一致的功能调用接口,同时还需要在有限的系统资源上尽可能快地完成应用的计算需求。
目前,主流的嵌入式操作系统有嵌入式Linux,Palm OS,VxWorks,Windows CE等。
1 Windows CE简介Windows CE是一个开放的、可裁剪的、32位实时嵌入式窗口的操作系统。
与其他桌面版窗口操作系统相比,它具有可靠性好,实时性高,内核体积小及可伸缩性,通信能力强等特点。
所以被广泛用于各种嵌入式智能设备的开发中,是当今应用最多,增长最快的嵌入式操作系统。
Windows CE是从整体上为有限资源平台设计的多线程、完整优先权、多任务的操作系统。
它采用高度的模块化设计,这些模块之间可能是独立的,也可能有一些依赖关系。
在Windows CE中最主要的系统模块有五个,它们是(1) 内核:Windows CE的内核可以非常小,最小的内核只有500 KB。
基于WINDOWS DDK的USB键盘驱动开发
卢晓娟;陈根生
【期刊名称】《电子世界》
【年(卷),期】2013(000)010
【摘要】USB接口具有方便快速等优点,已经发展成为一种比较普遍的计算机与外设的接口。
基于微软windows系统DDK,本文介绍了一种非标准USB键盘的windows设备驱动程序的开发过程与方法。
【总页数】2页(P83-84)
【作者】卢晓娟;陈根生
【作者单位】江西赣州农业学校;江西赣州农业学校
【正文语种】中文
【相关文献】
1.基于VxWorks的USB键盘驱动开发研究 [J], 白丽;任恩恩;朱娜敏
2.基于DDK的USB接口WDM驱动开发 [J], 邓玖根;张正荣;胡松;唐小萍
3.Windows CE下USB设备流驱动开发与设计 [J], 慕晓蕾
4.基于DDK的PCI总线数据交互驱动开发 [J], 段晗晗;
5.用DDK开发Windows USB驱动程序 [J], 杨成
因版权原因,仅展示原文概要,查看原文内容请购买。
MCGS简介MCGS(Monitor and Control Generated System,监视与控制通用系统)是北京昆仑通态自动化软件科技有限公司研发的一套基于Windows平台的,用于快速构造和生成上位机监控系统的组态软件系统,主要完成现场数据的采集与监测、前端数据的处理与控制,可运行于Microsoft Windows 95/98/Me/NT/2000/xp等操作系统。
MCGS组态软件包括三个版本,分别是网络版、通用版、嵌入版。
具有功能完善、操作简便、可视性好、可维护性强的突出特点。
通过与其他相关的硬件设备结合,可以快速、方便的开发各种用于现场采集、数据处理和控制的设备。
用户只需要通过简单的模块化组态就可构造自己的应用系统,如可以灵活组态各种智能仪表、数据采集模块,无纸记录仪、无人值守的现场采集站、人机界面等专用设备。
MCGS6.2网络版·良好的结构:先进的C/S(客户端/服务器)结构·简单的操作:客户端只需要使用标准的IE浏览器就可以实现对服务器的浏览和控制·良好性价比:整个网络系统只需一套网络版软件(包括通用版所有功能),客户端不需装MCGS的任何软件,即可完成整个网络监控系统·方便的使用:MCGS网络版服务器不要安装其他任何辅助软件,客户操作起来得心应手·强大的功能:MCGS网络版提供的网络ActiveX控件,可以方便的在其他各种应用程序中直接调用·方便的升级:MCGS嵌入版、通用版、网络版可以无缝连接,节省大量的开发和调试时间·多种网络形式:MCGS网络版支持局域网、广域网、企业专线和Modem拨号等多种连接方式,方便的实现企业的范围和距离的扩充MCGS6.2通用版MCGS6.2通用版是北京昆仑通态数十位软件开发精英,历时整整一年时间,辛勤耕耘的结晶,MCGS6.2通用版无论在界面的友好性、内部功能的强大性、系统的可扩充性、用户的使用性以及设计理念上都有一个质的飞跃,是国内组态软件行业划时代的产品,必将带领国内的组态软件上一个新的台阶。
WinCE电源管理李小伟软件应用工程经理上海掌微电子技术有限公司本次课程内容包括z电源管理概要z电源管理驱动程序的实现z内核级电源管理收听本次课程需具备的条件z了解WINCE设备驱动程序开发的一般知识z初步了解WINCE 电源管理驱动Level 200内容¾电源管理概要z电源管理驱动程序的实现z内核级电源管理电源管理驱动的功能z建立一个对整个系统环境,电源状态和设备电源状态的全局了解.可以自定义适合你的电源管理驱动来全局地管理你的平台.z设备驱动的电源管理可以从整个系统电源状态管理中脱离, 自己管理自己的电源状态.z控制系统电源状态切换的过程.电源管理架构在WINCE 中电源管理驱动的位置ApplicationsDevice DriversOS ServicesGWES HAL OEM Adaption Layer withPM supportHardwarePower ManagerDevice.exe电源管理驱动框架z电源管理驱动提供了给应用程序和设备驱动程序的APIz PM.DLL 通过自定义接口和DEVICE.EXE联接z用IOCTL来调用驱动程序电源管理APIz应用程序接口类API¾应用程序可以调用此类API改变系统电源状态,或设定对设备电源状态的需求z设备驱动程序接口类API¾设备驱动程序调用此类API来管理设备电源状态z消息通知(Notification)接口类API¾应用程序调用此类接口API来接收到电源状态变化的消息通知.应用程序接口类APIz取得/设置系统电源状态¾GetSystemPowerState¾SetSystemPowerState¾POWER_STATE_XXX 标志¾可自定义的标志¾例子:¾WINCE500\PUBLIC\COMMON\OAK\DRIVERS\PM\TEST\SET¾WINCE500\PUBLIC\COMMON\OAK\DRIVERS\PM\TEST\GETz设置/取消对设备电源状态的要求¾SetPowerRequirement¾ReleasePowerRequirement¾例子:¾WINCE500\PUBLIC\COMMON\OAK\DRIVERS\PM\TEST\REQ¾媒体播放器运行时,对显示驱动和背光的需求.z取得/设置设备电源状态¾GetDevicePower¾SetDevicePower*¾例子:¾WINCE500\PUBLIC\COMMON\OAK\DRIVERS\PM\TEST\GETD¾WINCE500\PUBLIC\COMMON\OAK\DRIVERS\PM\TEST\SETD*调用此API会限制电源管理驱动程序更新设备电源状态. 参考帮助文档.设备驱动程序接口类APIz设备驱动程序调用电源管理驱动¾DevicePowerNotify¾RegisterPowerRelationship¾ReleasePowerRelationshipz电源管理驱动调用设备驱动程序¾DeviceIoControl¾IOCTL_POWER_CAPABILITIES¾IOCTL_POWER_SET¾IOCTL_POWER_QUERY¾IOCTL_POWER_GET¾IOCTL_REGISTER_POWER_RELATIONSHIP消息通知接口类APIz RequestPowerNotifications¾PBT_RESUME¾系统从挂起状态恢复时产生此消息.¾PBT_POWERSTATUSCHANGE¾系统在接上和断开外部电源时产生此消息.AC power¾PBT_TRANSITION¾当电源管理驱动改变系统电源状态时产生此消息.¾PBT_POWERINFOCHANGE¾电池状态改变时产生此消息.z StopPowerNotificationsz例子:¾WINCE500\PUBLIC\COMMON\OAK\DRIVERS\PM\TEST\MON ¾应用程序通过此API获知电源/电池状态,切换电池图标.电源管理驱动管理的设备驱动程序z设备类型: 注册表项IClass-GUID¾[HKEY_LOCAL_MACHINE\SYSTEM\CurrentContro lSet\Control\Power\Interfaces]¾Generic power-manageable devices¾Power-manageable block devices¾Power-manageable NDIS miniports¾Power-manageable display¾例子:¾WINCE500\PUBLIC\COMMON\OAK\DRIVERS\PM\TEST\DEVSAMPLE¾AdverstiseInterface¾显示驱动程序调用此函数注册为Power-manageabledisplay 类型的驱动.内容z电源管理概要¾电源管理驱动程序的实现z内核级电源管理WINCE里的电源管理驱动程序z最少功能电源管理驱动程序(PMSTUBS)¾SYSGEN_PMSTUBS¾不支持电源管理APIz完全功能电源管理驱动程序¾SYSGEN_PM¾支持电源管理API¾WINCE提供了2个实例¾WINCE500\PUBLIC\COMMON\OAK\DRIVERS\PM\PDD\PDA¾WINCE500\PUBLIC\COMMON\OAK\DRIVERS\PM\PDD\DEFAULT电源管理驱动分层架构z MDD¾包含各类设备驱动的句柄¾管理设备的电源状态¾提供电源管理API的实现z PDD¾制定/维护系统电源状态机管理¾改变硬件电源状态z实现电源管理APIz跟踪和设置设备电源状态z跟踪应用程序的消息通知请求.z处理活动监视计数器z处理设备加载/卸载的通知,并维护设备驱动程序的句柄z处理父设备与子设备之间的电源关系z管理设备电源状态需求z实现与设备驱动程序的调用接口¾gStreamInterface. RequestStreamDeviceÆDeviceIoControl ¾gDisplayInterface. RequestDisplayDeviceÆExtEscapez自定义系统电源状态机z检查系统电源管理的注册表内容的一致性.z实现电源管理驱动的消息处理,实现状态机管理.z设置系统电源状态和相应设备进入对应的电源状态.z自定义状态¾On , UserIdle,SystemIdle,DeepIdle,Suspend,OnBattery, InCradle等状态.¾对应的POWER_STATE_XXX 标志¾系统电源状态到设备电源状态的映射z注册表设置[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ Power\State\On]Default=dword:0; D0Flags=dword:10000; POWER_STATE_ONCOM1:=dword1; D1D4Off (Off)D3Sleep (Suspend)D2Stand By (SystemIdle)D1Low on (UserIdle) D0Full on (On)系统电源状态到设备电源状态的映射z映射到所有默认的设备[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Pow er\State\SystemIdle]"Default"=dword:2; D2"Flags"=dword:100000; POWER_STATE_IDLEz映射到某一特定类型的设备[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Pow er\State\SystemIdle\{EB91C7C9-8BF6-4a2d-9AB8-69724EED97D1}] "Default"=dword:4 ; D4¾"{EB91C7C9-8BF6-4a2d-9AB8-69724EED97D1}“= "Power-manageable display“系统电源管理状态机z GWES监视用户操作,通过事件(Event)来通知电源管理驱动程序z电源管理驱动程序通过事件(Event)和超时机制来实现状态机用户活动计时器z为每个状态创建相应的事件(Event)¾3个事件¾A timer reset event.¾An active status manual-reset event.¾A manual-reset event¾[HKEY_LOCAL_MACHINE\SYSTEM\CurrentContro lSet\Control\Power\ActivityTimers\UserActivity]¾Active->Inactive->timeout 然后切换到下一个电源状态电源状态变迁依靠超时机制z[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlS et\Control\Power\Timeouts]"ACUserIdle"=dword:1e"ACSystemIdle"=dword:3c"ACDeepIdle"=dword:5a"BattUserIdle"=dword:1e"BattSystemIdle"=dword:3c"BattDeepIdle"=dword:5a"BatteryPoll"=dword:1f4z按秒计数z0 表示功能禁止, 系统不会自动切换到此状态z这些设置可以在”控制面板”里的电源管理里改变.系统电源状态变迁UserActiveUserIdleUserInactiveSystemIdleSystemActiveOnSystemInactiveSuspendTimeoutSystemInactivityUserInactivityTimeoutTimeoutSystemIdleSuspendUserActivityUser Interactive(PM State)(System State)(Event)电源管理状态切换timeoutPlatformUpdateSystemPowerStatePmSetSystemPowerState_IPlatformSetSystemPowerStateGenerateNotifications PowerOffSystemUpdateAllDeviceStatePmSetSystemPowerStateSetSystemPowerStateIf NewState(Internal call)(内部调用)(外部调用)If External callPlatformMapPowerStateHint(MDD)(PDD)内容z电源管理概要z电源管理驱动的实现¾内核级电源管理内核级电源管理¾OEMIdle¾当系统里没有线程要运行时被调用¾OEMPowerOff¾当系统要进入睡眠或关闭状态时被调用¾睡眠——唤醒的流程OEMIdlez当线程调度器里,没有线程需要运行时,调用此函数. (Blocked waiting for input or event.)z负责将CPU置于低功耗状态,并且能快速恢复到正常运行状态.z不能将内存(DRAM)置于自刷新状态OEMPowerOffz进入睡眠时,此函数负责将系统置于一个功耗最低的状态:¾保存系统设置¾将内存(DRAM)置于自刷新状态¾CPU停止工作(掉电)¾禁止中断处理(用于唤醒系统的中断除外)z退出睡眠状态时,此函数负责恢复系统的设置z睡眠¾调用SetSystemPowerState进入睡眠状态¾电源管理驱动里设置设备的电源状态¾调用PowerOffSystem()进入内核处理¾调用各设备驱动的XXX_PowerDown()¾调用OEMPowerOff()¾进入睡眠Zzzzz….z唤醒¾触发唤醒中断, CPU被唤醒¾开始执行Bootloader代码,判断冷启动还是唤醒¾判断为从睡眠中唤醒,用保存在内存上的地址跳回OEMPowerOff()里的唤醒位置,恢复系统设置¾调用各设备驱动的XXX_PowerUp()¾回到电源管理驱动中,更新各设备驱动的电源状态¾电源管理驱动发出系统状态变迁的消息通知¾整个系统恢复到正常运行状态PowerOffSystem的流程z SC_PowerOffSystem()¾WINCE500\PRIVATE\WINCEOS\COREOS\NK\KERNEL\kwin32.c内容z电源管理概要z电源管理驱动程序的实现z内核级电源管理移动与嵌入式开发者大会(MEDC)汲取新知,加速未来——移动与嵌入式开发者大会(MEDC)您想洞悉最前沿的微软移动与嵌入式技术吗?您想聆听最权威的技术专家现场讲授吗?您想全方位体验移动新产品所带来的无穷魅力吗?2006微软移动与嵌入式开发者大会将带领您与科技同步、与市场同行。