第十三讲 驱动程序概述及模型
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
应用程序可以在需要时才将DLL载入到内存
中,这让程序的可维护性变得很高。
比如微软的操作系统经常需要升级,微软的
程序员不必将操作系统代码都重写一遍,只 需将需要升级的相关DLL文件重写即可。
2013-6-9
动态链接库的组成
DLL是一种磁盘文件,以dll、DRV、FON、 SYS和许多以EXE为扩展名的系统文件都可 以是DLL。 它由全局数据、服务函数和资源组成,在运 行时被系统加载到进程的虚拟空间中,成为 调用进程的一部分。 如果与其它DLL之间没有冲突,该文件通常 映射到进程虚拟空间的同一地址上。
Device.exe
GWES.exe
FileSys.exe
鼠标驱动 网卡 电池 声卡 串口 NLED USB HOST HID ATADisk Printer SerCard rNDIS Mass Storage 图5.2 系统进程与其加载的驱动程序
11
PCMCIA Host
键盘驱动 触摸屏驱动 打印机驱动 显示驱动
操作系统没有内置支持的硬件
扩展已有驱动的功能 提供软件层面的服务
伪驱动(Pseudo Driver):所谓的伪驱动,就是不是 真正意义上的驱动;而挂着驱动的名号,却又是因为和 底层驱动有着千丝万缕的联系.
5.1.3 驱动程序模型
为简化驱动程序的编写,把驱动程序分层 提取某一类外设的共性,作为独立的一层,并
不经修改就可在总线工作; 尽量减少驱动程序在不同的硬件平台上移植所作的改动 对于特定的驱动技术,实现尽量多的功能; 在PB IDE的Catalog View中要有对应的可选项; 对硬件设备所依赖的总线不作任何假设; 对源代码有充分的注释; 尽量使用Windows CE5.0的特性; 尽量减少PDD的代码,使驱动程序更加方便移植; 对于资源的分配,尽量使用注册表进行配置; 提供可重用平台无关的库。
北京理工大学珠海学院 计算机教研室 19
2013-6-9
EXE文件的软肋
源代码都静态编译到整个应用程序EXE文件
中,会产生一些问题。
一是增加了应用程序的大小,占用更多的磁盘空间,程
序运行时也会消耗较大的内存空间,造成系统资源的浪
费。
另一个缺点是,在编写大的EXE程序时,在每次修改重
建时都必须调整编译所有源代码,增加了编译过程的复
驱动程序模型 动态链接库 动态链接库的特点与实现(重点) 动态链接库的加载 动态链接库的静态加载(难点)
2013-6-9
北京理工大学珠海学院 计算机教研室
3
教学重点
驱动程序的基本概念 动态链接库
教学难点
动态链接库的编制及静态加载方法
2013-6-9
北京理工大学珠海学院 计算机教研室
北京理工大学珠海学院 计算机教研室 17
大部分驱动程序的代码放在目录
%_WINCEROOT%\PUBLIC\COMMON\OAK\ DRIVERS\下,这些驱动程序都是与平台无关 的。 在BSP目录中也有一些驱动程序的代码,在目 录%_WINCEROOT%\PLATFORM\<BSP NAME>\SRC\DRIVERS\中,这些驱动都是与 平台相关的。
PDD层的特性:
包含与某款硬件相关的代码; 对于不同的硬件产品或标准有不同的实现; 只能与某一类MDD协同工作; 实现MDD所需要的DDSI函数。
在PB中自带的驱动程序中,声卡驱动程序的代
码是典型的分层驱动程序例子。 %_WINCEROOT%\PUBLIC\COMMON\OAK\ DRIVERS\WAVEDEV目录下
2013-6-9 北京理工大学珠海学院 计算机教研室 24
动态链接库的几点注意
DLL中包含各种导出函数,用于向外界提供 服务。
DLL有自己的数据段,但没有自己的堆栈,
使用与调用它的程序相同的堆栈。
一个DLL在内存中只有一个实例。
DLL的编制与具体的编程语言及编译器无关。
北京理工大学珠海学院 计算机教研室 25
2013-6-9 北京理工大学珠海学院 计算机教研室 16
5.2.4 Windows CE驱动程序的分类(P202) 5.2.5 示例驱动程序代码
PB自带了大量的驱动程序代码
Production-Quality
2013-6-9
Device Driver(P205)特性
第五章 驱动程序设计
2013-6-9
北京理工大学珠海学院 计算机教研室
1
教学目的
Windows CE5.0驱动程序设计的基本概念; 掌握Windows CE5.0动态链接库的编制方
法;掌握Windows CE5.0动态链接库的静
态加载方法
2013-6-9
北京理工大学珠海学院 计算机教研室
2
项目9:驱动程序的编制 本节课程主要知识点
杂性,也不利于阶段性的单元测试。
2013-6-9 北京理工大学珠海学院 计算机教研室 20
Windows CE中如何解决问题?
Windows CE中内存资源更少,甚至都没有 硬盘,资源问题更为突出。
Windows系统平台上提供了一种有效的编程 和运行环境,你可以将独立的程序模块创建 为较小的文件,并可对它们单独编译和测试。
单体驱动程序
即所有的驱动程序代码(包括中断处理、I/O操作及硬 驱动程序代码相对紧凑, 件控制等)都被放在一起。 对于效率要求较高的场 会暴露DDI接口(Device合,可以选择。同时此 Driver Interface)给操作系统。 模型相对清晰 DDI函数是操作系统与驱动程序交互的接口协议。
了解驱动程序的模型
不同的操作系统会提供不同的驱动模型
北京理工大学珠海学院 计算机教研室 8
2013-6-9
5.2 Windows CE驱动程序
5.2.1 Windows CE驱动程序开发简介
驱动程序的两种形式
.LIB库文件,随操作系统的启动和关闭进行加载和 卸载; 操作系统启动后对硬件进行延迟加载。
2013-6-9
北京理工大学珠海学院 计算机教研室
18
EXE文件
比较大的应用程序都由很多模块组成,这些 模块分别完成相对独立的功能,它们彼此协 作来完成整个软件系统的工作。
可能存在一些模块的功能较为通用,在构造 其它软件系统时仍会被使用。
在构造软件系统时,常常将所有模块的源代 码都静态编译到整个应用程序EXE文件中。
2013-6-9 北京理工大学珠海学院 计算机教研室 14
给驱动程序分层后,MDD和PDD之间还需要一个接 口协议。故分层驱动中有两类接口函数:操作系统 与MDD之间的DDI与MDD和PDD之间的DDSI (Device Driver Service provider Interface) 通常,MDD层的代码与PDD层的代码被编译成独立 的静态LIB库,然后进行链接,形成可执行的驱动程 序。MDD与PDD的划分只是在源代码逻辑层面,在 驱动程序的二进制可执行代码中不存在分层概念 MDD的特性:
பைடு நூலகம்
文件系统驱动
2013-6-9
北京理工大学珠海学院 计算机教研室
Device.exe在Windows
CE中称做设备管理器。 负责加载和管理Windows CE下绝大多数的设备 驱动程序,包括网卡驱动、电池驱动、声卡驱 动、串口驱动、USB设备驱动及PCMCIA驱动 等; GWES.exe通常是一些与图形界面相关的I/O设 备驱动。例如鼠标键盘驱动、显卡的驱动及触 摸屏驱动等。 FileSys.exe在系统中负责管理Windows CE中的 对象存储和文件系统。故FileSys.exe须负责加 载所有的文件系统驱动程序。如FAT文件系统驱 动和CDFS文件系统驱动等。
北京理工大学珠海学院 计算机教研室
22
动态链接库(Dynamic Link Library)
动态链接库缩写为DLL。 DLL是一些编译过的可执行程序模块、数据 或其他资源,可以被应用程序或其他DLL调 用。 DLL的应用非常广泛,可以实现多个应用程 序的代码和资源共享。
北京理工大学珠海学院 计算机教研室 23
包含某一类驱动程序所通用的代码; 调用PDD层访问硬件设备; 与PDD层代码进行链接,定义PDD层必须实现的DDSI函 数,并在代码中使用这些函数; 对于操作系统实现DDI函数,供操作系统与驱动程序交互;
2013-6-9 北京理工大学珠海学院 计算机教研室 15
MDD的特性:
进行中断处理; 对于同一类型的驱动程序,代码可重用; 编译后生成的lib库可与不同的PDD库进行链接; 通常无须改动; 中断处理线程IST通常位于这一层。
5.2.2 Windows CE驱动程序的宿主
DLL无法单独被加载和运行,必须先有一个
EXE进程将DLL加载到自己的地址空间 Windows CE中有3个系统进程会加载和执行驱 动程序的DLL,分别是Device.exe, GWES.exe,FileSys.exe
2013-6-9 北京理工大学珠海学院 计算机教研室 10
提供通用的代码和库
2013-6-9 北京理工大学珠海学院 计算机教研室 7
5.1.4 编写驱动程序的几个要素
了解驱动程序所针对的硬件(Datasheet) 了解目标操作系统下驱动的工作机制
驱动程序的加载和卸载; 驱动程序的初始化工作; 外设I/O的访问; 中断的处理; DMA的处理; 内存的使用以及异步操作的进行方式等。
4
5.1驱动程序基本知识
5.1.1 驱动程序的功能
驱动程序是操作系统与硬件交互的方式,是连
接硬件与操作系统之间的桥梁; 独立的“黑盒子”,定义好的编程接口,隐藏 设备工作的细节; 驱动程序的作用是实现这组接口,并映射到具 体的对硬件的某项操作上。
驱动程序 接口
2013-6-9 北京理工大学珠海学院 计算机教研室 5
2013-6-9 北京理工大学珠海学院 计算机教研室 12
5.2.3 分层驱动程序与单体驱动程序
GWES
DDI函数
DDI函数
分层驱动程序 MDD DDSI函数 PDD
单体驱动程序
硬件
图5.3 单体驱动程序与分层驱动程序
2013-6-9 北京理工大学珠海学院 计算机教研室 13
5.2.3.1
2013-6-9
动态链接库的特点
2013-6-9
北京理工大学珠海学院 计算机教研室
26
共享资源
共享代码、资源和数据。DLL不仅可以包含 可执行的代码,还可以包括数据和各种资 源等,扩大了库文件的使用范围。
2013-6-9
北京理工大学珠海学院 计算机教研室
27
方便应用程序的扩展
由于DLL能被应用程序动态载入内存。所以,
Windows
CE的所有驱动程序都以用户态下的 DLL文件形式存在,运行在用户态。
2013-6-9
北京理工大学珠海学院 计算机教研室
9
驱动程序作为用户态DLL的优点:
给操作系统和驱动程序带来了很大的灵活性,动态 加载所需的驱动程序,可实现外设的即插即用; 增强系统的稳定性; 给驱动开发人员提供便利。
应用程序
Send()
系统调用
操作系统 SendPackage() 网卡驱动程序1 网卡驱动程序2 MySendPackage2() 网卡2
驱动程序接口
MySendPackage1() 网卡1
硬件操作
图5.1 驱动程序模型
2013-6-9 北京理工大学珠海学院 计算机教研室 6
5.1.2 何时编写驱动程序
这些较小的模块就是动态链接库DLL。
北京理工大学珠海学院 计算机教研室 21
2013-6-9
Windows CE中的DLL
在运行时,只有当EXE程序确实要调用这些 DLL模块的情况下,系统才会将它们装载到 内存空间中。
Windows自己就将一些主要的系统功能以
DLL模块的形式实现。
2013-6-9
5.2.3.2
分层驱动程序
分两层:上面一层是模型设备驱动(Model Device Driver,MDD),下面一层是平台相关驱动(Platform Dependence Driver,PDD) MDD层包含某一类型的驱动程序所通用的代码;PDD 层包含特定的硬件或平台专用的代码。 操作系统访问硬件时,MDD层会调用特定的PDD函数 PB会自带某类型驱动的MDD代码,无须修改;只须修 改PDD层的代码。