- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
驱动程序地加载
* * * * * * * * * * * * * * 驱动程序的加载 本节课程主要知识点 驱动程序与动态链接库 驱动程序的加载 驱动程序的测试 重点和难点 重点 驱动程序的加载 难点 驱动程序的加载 驱动程序与动态链接库 驱动程序与DLL 在Windows CE 6.0下,驱动程序可以加载到内核空间,也可以加载到用户空间。 驱动程序都是以动态链接库来加载的,其加载过程与一般的DLL加载过程完全相同。 驱动程序的加载是由Device.dll加载到内存中的。 用户态的驱动程序 Windows CE实现用户态的驱动程序有着特殊的考虑。 这样的实现为操作系统和驱动程序的设计带来的灵活性。操作系统可在运行时动态地加载所需要的驱动程序,这样可以轻松地实现外设的即插即用。 用户态的驱动可增强系统的稳定性 把驱动程序放在操作系统的内核态来执行,可方便地对外部设备资源进行访问又不会增加系统的额外开销。这样做会对操作系统的稳定带来隐患。 在内核模式下,驱动程序的崩溃会导致整个操作系统的崩溃。 驱动程序放在用户地址空间,就不会对操作系统内核造成威胁了。 用户态的驱动可提供更多便利 将驱动程序编写成一个用户态的DLL,调试过程也就更为简单。 驱动程序的编写可以使用应用程序使用的所有资源,可以使用C的运行时库,也可以使用Win32 API甚至是MFC的函数。 驱动程序的宿主 驱动程序是一个个的DLL文件,DLL是无法单独加载运行的,需要有一个进程把该DLL加载到自己的地址空间,然后才可执行DLL中的代码。这个进程称为驱动程序的宿主。 在Windows CE 6.0中,有三个系统的进程会加载和执行驱动程序的DLL。分别是Device.dll、GWES.dll和FileSys.dll。 Device.dll Device.dll称为设备管理器,它负责加载和管理Windows CE下的绝大多数设备驱动程序。 这些驱动程序包括网卡驱动、电池驱动、声卡驱动、串口驱动、USB设备驱动及PCMCIA驱动等。 加载到内核态的驱动,交由NK.exe来管理,加载到用户态的驱动,交由Udevice.exe来管理。 GWES.dll GWES.dll只加载GWES进程使用到的驱动程序,这些驱动程序通常是一些与图形界面相关的I/O设备驱动。 这些驱动包括鼠标键盘驱动、显卡驱动、打印机驱动及触摸屏驱动等。 FileSys.dll FileSys.dll在系统中负责管理Windows CE中的对象存储和文件系统。因此,FileSys.dll须负责加载所有的文件系统驱动程序。 这些驱动包括FAT文件系统、CDFS文件系统等。 驱动程序的加载 驱动程序的加载 在Windows CE操作系统中,驱动程序的加载有三种方法: 系统启动时加载。 设备管理器自动检测到设备时加载。 应用程序使用ActivateDeviceEx加载。 系统启动时加载驱动 将驱动程序的信息添加到注册表项 HKEY_LOCAL_MACHINE\drivers\BuiltIn 系统启动时会自动遍历该键值下的所有子键,将其中的DLL文件依次加载。 系统启动时加载驱动的过程 镜像NK.bin 下载 1 内存SDRAM 内核在启动过程中 2 2 设备管理器 (Device.dll ) / 2 GWES管理器 (GWES.dll ) 2 流式驱动 / 加载 加载 2 本地驱动 / 3 自动检测到设备时加载 设备管理器自动检测到外围设备时加载,例如SD卡、CF卡及PC卡驱动程序的加载 。 检测到设备时再加载驱动程序在具体应用中有非常实用的价值,有关内容在下一讲中详细讲解。 使用ActivateDeviceEx加载 设备管理器不能自动检测或加载时使用,或者用户希望由应用程序来加载驱动程序时使用。 使用DeactivateDevice 来卸载驱动程序。 自动与手动加载驱动程序过程 2 检测外围设备 是否插入 2 通知设备总线 是 否 调用注册表的API函数创建注册键和 注册驱动设备的信息 2 调用ActivateDevicdEx函数通知设备管理器 2 设备管理器 (Device.dll ) / 2 相应的驱动 / 加载 1 2 应用程序调用 2 2 准备加载的驱动文件 3 4 系统检测外围 设备来加载设备驱动 手动安装设备驱动 驱动程序的测试 编写驱动测试程序 驱动测试程序的要点 测试Open()函数,应用程序中使用CreateFile ()函数 测试Read()函数,应用程序中使用ReadFile ()函数 测试Write()函数,应用程序中使用WriteFile ()函数 测试IOControl()函数,使用D
文档评论(0)