驱动程序的测试

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

驱动程序为什么是用户态的DLL?
驱动程序作为用户态的DLL来实现有其 特殊的考虑。 这样的实现为操作系统和驱动程序的设 计带来的灵活性。操作系统可在运行时 动态地加载所需要的驱动程序,这样可 以轻松地实现外设的即插即用。

用户态的DLL可增强系统的稳定性
把驱动程序放在操作系统的内核态来执 行,可方便地对外部设备资源进行访问 又不会增加系统的额外开销。这样做会 对操作系统的稳定带来隐患。 在内核模式下,驱动程序的崩溃会导致 整个操作系统的崩溃。 驱动程序放在用户地址空间,就不会对 操作系统内核造成威胁了。
系统启动时加载

将驱动程序的信息添加到注册表项

HKEY_LOCAL_MACHINE\drivers\BuiltIn

系统启动时会自动遍历该键值下的所有 子键,将其中的DLL文件依次加载。
自动检测到外围设备时加载
设备管理器自动检测到外围设备时加载, 例如SD卡、CF卡及PC卡驱动程序的加 载。 检测到设备时再加载驱动程序在具体应 用中有非常实用的价值,有关内容在下 一讲中详细讲解。
启动时加载驱动的测试

打开驱动程序工程的Parameter files 文件夹,找 到驱动程序的注册表文件并打开,在里面输入

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Strings] "Prefix"="STR" "Dll"="STRINGS.dll " "Order"=dword:1 "Index"=dword:1
项目14:驱动程序的加载(1)
本节课程主要知识点 驱动程序与动态链接库 驱动程序的加载 驱动程序的测试
重点和难点
重点 驱动程序的加载
难点 驱动程序的加载
驱动程序与动态链接库
Βιβλιοθήκη Baidu动程序与DLL
在Windows CE下,所有的驱动程序都是 以用户态下的动态链接库来加载的。 驱动程序的加载过程与一般的DLL加载 过程完全相同。 驱动程序的加载是由Device.exe动态加载 到内存中的。

Device.exe
Device.exe称为设备管理器,它负责加载 和管理Windows CE下的绝大多数设备驱 动程序。 这些驱动程序包括网卡驱动、电池驱动、 声卡驱动、串口驱动、USB设备驱动及 PCMCIA驱动等。

GWES.exe
GWES.exe只加载GWES进程使用到的驱 动程序,这些驱动程序通常是一些与图 形界面相关的I/O设备驱动。 这些驱动包括鼠标键盘驱动、显卡驱动、 打印机驱动及触摸屏驱动等。
将以上键值使用RegCreateKeyEx()函数添 加到注册表中。 利用ActivateDeviceEx加载驱动程序。 运行测试程序来观察结果。


使用ActivateDeviceEx加载
设备管理器不能自动检测或加载时使用, 或者用户希望由应用程序来加载驱动程 序时使用。 使用DeactivateDevice 来卸载驱动程序。

驱动程序的测试
编写驱动测试程序

驱动测试程序的要点

测试Open()函数,应用程序中使用CreateFile ()函数 测试Read()函数,应用程序中使用ReadFile ()函数 测试Write()函数,应用程序中使用WriteFile ()函数 测试IOControl()函数,使用DeviceIoControl ()函数 测试Close()函数,使用CloseHandler ()函数

用户态的DLL可提供更多便利
将驱动程序编写成一个用户态的DLL, 调试过程也就更为简单。 驱动程序的编写可以使用应用程序使用 的所有资源,可以使用C的运行时库,也 可以使用Win32 API甚至是MFC的函数。

驱动程序的宿主
驱动程序是一个个的DLL文件,DLL是 无法单独加载运行的,需要有一个EXE 进程把该DLL加载到自己的地址空间, 然后才可执行DLL中的代码。这个进程 称为驱动程序的宿主。 在Windows CE中,有三个系统的进程会 加载和执行驱动程序的DLL。分别是 Device.exe、GWES.exe和FileSys.exe。

FileSys.exe
FileSys.exe在系统中负责管理Windows CE中的对象存储和文件系统。因此, FileSys.exe须负责加载所有的文件系统驱 动程序。 这些驱动包括FAT文件系统、CDFS文件 系统等。

驱动程序的加载
驱动程序的加载

在Windows CE操作系统中,驱动程序的 加载有三种方法: 系统启动时加载。 设备管理器自动检测到外围设备时加 载。 应用程序使用ActivateDeviceEx加载。

选择Make Run-Time Image,重新生成内核。 将NK.bin下载到设备上并运行驱动程序测试程 序,可以观察到驱动已经自动加载。
用ActivateDeviceEx加载驱动测试

创建驱动加载工程,首先要在工程代码 中定义驱动程序的注册表的键值

TCHAR szDevKey[] = _T("Drivers\\Strings"); TCHAR szDllName[] = _T("STRINGS.DLL"); TCHAR szPrefix[] = _T("STR");
相关文档
最新文档