设备管理器和GWES课件

上传人:我*** 文档编号:144116558 上传时间:2020-09-06 格式:PPT 页数:71 大小:108KB
返回 下载 相关 举报
设备管理器和GWES课件_第1页
第1页 / 共71页
设备管理器和GWES课件_第2页
第2页 / 共71页
设备管理器和GWES课件_第3页
第3页 / 共71页
设备管理器和GWES课件_第4页
第4页 / 共71页
设备管理器和GWES课件_第5页
第5页 / 共71页
点击查看更多>>
资源描述

《设备管理器和GWES课件》由会员分享,可在线阅读,更多相关《设备管理器和GWES课件(71页珍藏版)》请在金锄头文库上搜索。

1、设备管理器和GWES,www.up- 博创科技 嵌入互动,主要内容,设备管理的基本概念 WinCE的设备管理 设备管理器的具体实现 GWES的概念和功能 从应用程序调用GWES,1、设备管理的基本概念,设备的分类,按设备的使用特性: 存储设备 输入输出设备 终端设备 。 按设备的从属关系 系统设备 用户设备,设备管理的任务,选择和分配输入输出设备以便进行数据传输操作 控制输入输出设备和CPU之间交换数据 为用户提供一个友好的透明接口,把用户和设备硬件特性分开,使得用户在编制应用程序时不必涉及具体设备,系统按用户要求控制设备工作。另外这个接口还为新增加的用户设备提供一个和系统核心相连接的入口,以

2、便用户开发新的设备管理程序。 提高设备和设备之间、CPU和设备之间,以及进程和进程之间的并行操作度,以使操作系统获得最佳效果。,设备管理的功能,提供和进程管理系统的接口。当进程要求设备资源时,该接口将进程要求转达给设备管理程序。 进行设备分配。按照设备类型和相应的分配算法把设备和其他有关的硬件分配给请求该设备的进程,并把为分配到所请求设备获取他有关硬件的进程放入到等待队列。 实现设备和设备、设备和CPU等之间的并行操作。 进行缓冲区管理。,对设备的控制方式,程序直接控制方式 中断方式,2、WinCE的设备管理,设备管理器的概念,设备管理器是在 Windows CE 操作系统下运行的进程,它跟踪

3、已加载的驱动程序和它们的接口。它连续不断地运行并且从内核中启动。 设备管理器可以在设备接口变得可用和不可用时通知用户。用户或系统本身可以使设备接口变得可用或不可用。 另外,设备管理器通知内核设备接口支持文件操作(例如,CreateFile)访问公开流接口的设备。 设备管理器向设备驱动程序发送电源通知回调并提供电源管理服务。,设备管理器和注册表,设备管理器控制注册表中的 Active 项。 只有设备管理器应当访问 Active 项以获取读取或写入访问权限。 可以通过设备驱动程序的初始化函数的参数间接访问 Active 项。,设备管理器和注册表,设备管理器搜索 HKEY_LOCAL_MACHINE

4、DriversRootKey 注册表项,以确定用于开始驱动程序加载过程的项。 RootKey 的默认值是 Drivers,但是它通常等于 DriversBuiltIn。 设备管理器调用 ActivateDeviceEx 以加载由 Dll 子项的值指定的驱动程序。Dll 子项的值默认情况下为 BusEnum.dll(也称为总线枚举器)。 加载 BusEnum.dll 会使所有设备驱动程序加载。由 ActivateDeviceEx 加载的设备可以从它的 Active 注册表项中读取它的激活句柄。,驱动程序的命名,设备管理器将总线名称与驱动程序相关联。未命名的设备也可以具有总线名称,因为即使应用程序

5、可能无法访问驱动程序,驱动程序也可能被其他驱动程序或系统实体(例如,电源管理器)访问。总线名称可以具有与正规设备名称不同的 ACL。 设备管理器跟踪由驱动程序公布的接口,并且支持基于全局唯一标识符 (GUID) 搜索驱动程序。IClass 接口可以将接口 GUID 与驱动程序的旧式名称、$device 名称或 $bus 名称(例如,“COM1 :”、“$devicecom1”或“$buspci_0_3_0”)相关联。,公布驱动程序的接口,驱动程序可以通过调用 DMAdvertiseInterface 以编程方式公布接口。DMAdvertiseInterface 使驱动程序能够将更多可搜索的 G

6、UID 添加到它们的关联列表中。DMAdvertiseInterface 由 Devmgr.dll 公开,后者还实现了大多数设备管理器功能。因为只有设备管理器可以加载 Devmgr.dll,所以只有设备驱动程序可以调用 DMAdvertiseInterface。如果设备驱动程序在卸载时没有公布它的接口的不可用性,则设备管理器会自动清除接口公布通知。,设备管理器组成,设备管理器由 Device.exe 和 Devmgr.dll 组成。Device.exe 包含 Devmgr.dll,后者实现了核心设备管理器功能。 因为设备管理器由两个单独的模块组成,所以设备驱动程序可以直接与设备管理器链接并调用

7、特定的函数而不会引起系统调用的开销。,设备管理器组件,设备管理器的体系结构,一般操作系统的设备管理都采用分层的管理模式。WinCE在模块组成和划分方面更加具体而实用。 WinCE设备管理部分采取了类似Windows 2000/XP的结构,大大的简化了中断处理、I/O访问以及内部管理的机制。 WinCE的设备管理包括四个部分。,设备管理器的体系结构,设备管理器:设备管理器是WinCE设备管理的核心机构,他主要负责跟踪、维护系统的设备信息并对设备资源进行调配。 I/O资源管理:I/O资源管理器是设备管理模块内部的重要组成部分,他跟踪了设备驱动程序装载前从注册表信息中初始化所需的系统资源。 电源管理

8、器: 支撑和管理例程库,3、设备管理器的具体实现,设备加载,设备加载的代码被放入device.c的InitDevices函数中 此函数已工作了以下一些工作: 打开注册表 读出注册表的HKEY_LOCAL_MACHINEDriversRootKey键 激活里面列出的设备 具体实现如下:,设备加载,InitDevices(VOID)/此函数的目的是为了初始化内置的驱动程序,不需要入口函数 / Open HLMDrivers key / status = RegOpenKeyEx(/打开指定的键 HKEY_LOCAL_MACHINE, DEVLOAD_DRIVERS_KEY, 0, 0, ,设备加载

9、,status = RegQueryValueEx(/查询roots RootKey, DEVLOAD_ROOTKEY_VALNAME, NULL, /将此值传给ActiveDevice函数来加载设备 ,设备加载,由上面的代码可以看出,设备加载的过程依赖于注册表,任何新的设备必须首先在注册表中声明,随后才能被加载 设备加载的核心是ActiveDeviceEx,此函数没有被公开 如果在应用程序中加载一个新的设备,可以调用ActiveDeviceEx,这和设备管理器加载设备的过程是相同的。,设备管理器中的WinMain,设备管理器表现为device.exe,这是由源程序编译得到的可执行文件,设备管

10、理器运行在用户模式。对于可执行文件,一般都存在一个主函数。设备管理器的主函数放在device.c中,为WinMain。 WinMain函数完成设备的初始化和加载过程,整个过程分为三个阶段。,设备管理器中的WinMain,第一阶段:构造基本的数据结构 第二阶段:装载并初始化设备 第三阶段:记录下做过的工作,整理 具体代码分析见下:,设备管理器中的WinMain,int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPWSTR lpCmdLine, int nCmShow) HINSTANCE hCeddkDll;/cdddk.dll的

11、实例句柄,实例句柄一般都指向某一个库文件 HANDLE hevBootPhase1;/事件句柄 /开始第一阶段的启动,构造各种基本的数据结构 / PHASE 1 g_BootPhase = 1;/全局变量,表明当前启动阶段为第一阶段 InitOOMSettings();/初始化OOM设置,什么是OOM? InitializeListHead(/注册API集合,设备管理器中的WinMain,InitializeDeviceNotifications();/初始化设备通知结构,在这个结构里包含三个域,第一 /个是通知链表元素,第二个是广告(?)链表元素,第 /三个是临界区。在这个函数中分别对这三项

12、进行了初始 /化。WINCE设备管理其中也是广泛应用了临界区,相比 /核心对象,临界区更快,大量使用临界区可以提高程序 /的速度 InitializeCriticalSection(/开启设备通知线程,设备管理器中的WinMain,/ Calibrate stall counter that is used for StallExecution hCeddkDll = LoadLibrary (TEXT(ceddk.dll);/加载ceddk。Dll if (NULL != hCeddkDll) /如果加载成功 pCalibrateStallFn fnCalibrateStall = (pCa

13、librateStallFn)GetProcAddress(hCeddkDll, TEXT(CalibrateStallCounter);/得到库中函数CalibrateStallCounter的地址 if (!fnCalibrateStall) /如果没有此地址则释放库 DEBUGMSG(ZONE_BOOTSEQ, (LGetProcAddress failed on ceddk.dllrn); FreeLibrary(hCeddkDll); else fnCalibrateStall();/有则执行之 / Call the power manager initialization entr

14、y point PM_Init();/电源管理函数入口点,核心内容未公开 PM_SetSystemPowerState(NULL, POWER_STATE_ON, POWER_FORCE);/设置当前状态,核心内容未公开,设备管理器中的WinMain,/ See if we are going to have two boot phases hevBootPhase1 = OpenEvent(EVENT_ALL_ACCESS, FALSE, _T(SYSTEM/BootPhase1);/打开事件 if (hevBootPhase1 != NULL) /如果已打开 HANDLE hEvent;

15、/ Load phase 1 drivers from the boot registry DevloadInit();/加载设备 / Signal boot phase 1 complete SetEvent(hevBootPhase1);/第一阶段结束 CloseHandle(hevBootPhase1); / Wait for phase 2 of the boot to begin hEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE, TEXT(SYSTEM/BootPhase2);/打开第二阶段的事件,设备管理器中的WinMain,if (hEven

16、t) /如果事件存在 DEBUGMSG(ZONE_BOOTSEQ, (TEXT(DEVICE: Started, waiting for boot phase 2rn); WaitForSingleObject(hEvent, INFINITE);/等待时间被释放 CloseHandle(hEvent); / Load any new drivers from the persistent registry. Since the / registry may have changed, update the power state for any devices / that need it. DEBUGMSG(ZONE_BOOTSEQ, (TEXT(DEVI

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号