驱动程序设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
流接口驱动程序的体系结构
应用程序 FileSys.exe 设备管理器(device.exe) 设备管理器(device.exe) 流接口驱动程序 硬件
流接口驱动程序的体系结构
标准的流接口函数
动 态 连 接 库 函 数
其中电源管理的部分是可选的, 其中电源管理的部分是可选的,在实际开发中接口名称中的 XXX三个字母由设备驱动的设备文件名前缀代替。 三个字母由设备驱动的设备文件名前缀代替。 三个字母由设备驱动的设备文件名前缀代替
嵌入式操作系统Windows CE 嵌入式操作系统
——驱动程序设计 驱动程序设计
课程安排
• 提纲 Windows CE 5.0驱动程序简介 驱动程序简介 流接口驱动程序分析 动动手——简单的流接口驱动程序 动动手 简单的流接口驱动程序 LED点阵发光原理 点阵发光原理 设备的硬件接口电路分析 Windows CE访问设备地址的实现 访问设备地址的实现 LED点阵驱动程序分析 点阵驱动程序分析
驱动程序简介
设备驱动程序是使操作系统和用户应用程序能够与外设硬 件(与目标设备集成或连接的)交互的组件,例如 Peripheral Component Interconnect ( 外围组件互联, PCI) 总线、键盘、鼠标、串口、显示、网络适配器和存储 设备。操作系统 (OS) 载入相应设备驱动程序,然后使用 这些驱动程序提供的函数和输入/ 输出 (I/O) 服务,在设 备上执行操作,而非直接访问硬件。
内核态驱动 VS 用户态驱动
Windows Embedded CE 6.0引入了内核态驱动和用户态驱 动的概念。在Windows CE5.0及先前的版本中,驱动工作在 用户态。从代码方面看,内核态驱动和用户态驱动没太大 差别。 内核态驱动被加载到内核空间,用户态驱动被加载到特 定的用户进程空间中。从执行效率来看,内核态的驱动效 率比用户态的驱动高。从稳定性方面考虑,用户态的驱动 不会对系统产生致命影响,而内核态的驱动相对危险。至 于采用哪一种结构的驱动,主要根据开发人员的需求。
驱动程序分类
• Windows CE驱动的分类,主要有以下:
– 按驱动接口分,可分为本地驱动和流驱动; – 按驱动结构分,可分为单层驱动和分层驱动; – 按驱动加载的空间分,可分为内核态驱动和用 户态驱动; – 按驱动加载的时间分,可分为启动时加载和需 要时加载两种。
本地 VS 流接口驱动
Windows CE下的驱动都可以归类到这两个里面,二者必 居其一,是从驱动程序提供给操作系统的接口来区分的。 本地驱动程序通常支持输入和输出外设,比如显示驱动 程序、键盘驱动程序、和触摸屏驱动程序。图形、窗口、 和事件子系统 (GWES) 直接加载和管理这些驱动程序。本 地驱动程序根据它们的目的而实现特定的函数,由操作系 统调用,应用程序不能访问。 流驱动程序公开众所周知的一套函数,以启用 Device Manager ( 设备管理器) 来加载和管理这些驱动程序。为 了 Device Manager ( 设备管理器) 能够与流驱动程序交 互,驱动程序必须实现 Init、Deinit、Open、Close、 Read、Write、Seek、和 IOControl 函数。流驱动可以动 态管理,驱动调试助手就是用来帮助调试这一类驱动的。
动动手
• 简单的流接口驱动程序
借助Windows CE 5.0 Embedded Development Labs.msi
添加一个作为设备驱动程序的项目
1. 用 Platform Builder 打开现有的 MyPlatform 工作区。 工作区。 2. 在 File 菜单上,单击 New Project or File。 菜单上, 。 3. 选择 WCE Dynamic-Link Library,给它一个合适的 , 名称(例如, ),然后单击 名称(例如,StreamDrv),然后单击 OK,如图。 ), ,如图。
Device.exe 又称做设备管理器,负责加载和管理 又称做设备管理器, Windows CE下绝大多数的设备驱动程序。 CE下绝大多数的设备驱动程序 下绝大多数的设备驱动程序。 GWES.exe负责加载一些与图形界面相关的 设备驱动 GWES.exe负责加载一些与图形界面相关的I/O设备驱动。 负责加载一些与图形界面相关的I/O设备驱动。 FileSys.exe在系统中负责管理 FileSys.exe在系统中பைடு நூலகம்责管理Windows CE中的对象存 在系统中负责管理Windows CE中的对象存 储和文件系统,负责加载所有的文件系统驱动程序。 储和文件系统,负责加载所有的文件系统驱动程序。
8. 按 Go,将生成流驱动程序源代码。 ,将生成流驱动程序源代码。
小结
• • • • DLL。 驱动程序只不过是一些 DLL。 进程地址空间中。 驱动程序被映射到 Device.exe 进程地址空间中。 驱动程序公开了一个众所周知的接口集。 驱动程序公开了一个众所周知的接口集。 将设备驱动程序添加到 Windows CE 操作系统映 像中相对容易的多。 像中相对容易的多。
流接口驱动程序
流接口驱动程序是实现流接口函数的设备驱动程序。不 管硬件细节,所有Windows CE流驱动程序都公开流接口函 数给操作系统,从而Windows CE的Device Manager(设备管 理器)可以载入并管理这些驱动程序。 在流式接口驱动程序中,驱动程序负责把外设抽象成一 抽象成一 个文件,而应用程序则使用操作系统提供的文件API对外设 个文件 进行访问。 典型的流接口驱动程序有: ◇文件系统驱动 ◇串口驱动
启动时加载驱动 VS 需要时加载驱动
从驱动加载的时间来看,可分为两种:系统启动时加载和需要 时加载。一般来说本地驱动都是在启动时加载的,在这里主要针 对是流驱动来说的。 驱动在系统启动时加载,只需将它的注册表配置信息放到 [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\]下,如 [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Battery],系统启动时, Device Manager会自动加载它。需要时加载,动态加载,很灵活。 注意:USB设备的驱动加载,如USB摄像头驱动,它也属于需要时 加载的驱动。从驱动的接口来看,它属于流驱动,但相对普通的 流驱动,它增加了几个函数:USBDeviceAttach()、 USBInstallDriver()、USBUnInstallDriver()等。USB摄像头驱 动的加载在USBDeviceAttach()中完成。所以,它无须,也不能 用驱动调试助手加载。需要时加载的驱动还有一个作用,在无法 修改系统的情况下,应用程序中动态加载该驱动,以完成对硬件 的操作。
设备文件名
• Device:\$device\+前缀+索引
• 例:“\$device\COM1”
– 命名方法与传统命名方法相似; – 支持多于10个流设备名;
• 例:“\$device\COM27”
课程安排
• 理论 Windows CE 5.0驱动程序简介 驱动程序简介 流接口驱动程序分析 动动手——简单的流接口驱动程序 动动手 简单的流接口驱动程序 LED点阵发光原理 点阵发光原理 设备的硬件接口电路分析 Windows CE访问设备地址的实现 访问设备地址的实现 LED点阵驱动程序分析 点阵驱动程序分析 • 实验 标准的流接口驱动程序开发与测试
4. 在下图所显示的页面中填写一些您需要的信息,然后 在下图所显示的页面中填写一些您需要的信息, 单击 Next。 。
5. 选择 simple Windows CE DLL project,单击 选择A , Finish 完成此向导。
6. 为驱动程序选择一个唯一的三字母标识符。在 为驱动程序选择一个唯一的三字母标识符。 Location 框中输入之前创建的流驱动程序的完整路径, 框中输入之前创建的流驱动程序的完整路径, 或者使用“ 按钮定位。 或者使用“browse”按钮定位。 按钮定位 7. 在 Driver Filename 框中输入驱动程序的名称。如图, 框中输入驱动程序的名称。如图, 相同的名称, 使用与前面使用名称 (StreamDrv) 相同的名称,以确 中创建的原始文件。 保改写在 Platform Builder 中创建的原始文件。
驱动程序的功能
驱动程序将操 作系统和设备链 接起来,使得操 作系统能够识别 设备,并为应用 程序提供设备服 务。 应用程序 Send() 操作系统 SendPackage() 网卡驱动程序2 网卡驱动程序2 MySendPackage2() 网卡1 网卡1
驱动程序的任 网卡驱动程序1 网卡驱动程序1 务,就是把操作 系统的驱动接口 MySendPackage1() “映射”到具体 映射” 的功能实现中。 网卡1 网卡1
课程安排
• 提纲 Windows CE 5.0驱动程序简介 驱动程序简介 流接口驱动程序分析 动动手——简单的流接口驱动程序 动动手 简单的流接口驱动程序 LED点阵发光原理 点阵发光原理 设备的硬件接口电路分析 Windows CE访问设备地址的实现 访问设备地址的实现 LED点阵驱动程序分析 点阵驱动程序分析
驱动程序基本知识
在 Windows CE 上,设备驱动程序是一个动态链接库 (DLL),它提供底层硬件与操作系统及运行在目标设备上的 应用程序之间的一个抽象层。驱动程序公开一套知名的函 数并提供初始化硬件和与之通信的规则。软件开发人员可 以在他们的应用程序中调用驱动程序的函数来与硬件交互。 如果设备驱动程序遵循众所周知的应用程序编程接口(API), 比如 Device Driver Interface ( 设备驱动程序接口) (DDI),您就可以把驱动程序作为操作系统的一部分而载入, 比如显示驱动程序或用于存储设备的驱动程序。不用知道 物理硬件的细节,应用程序就可以调用标准Windows API 函数,比如 ReadFile 或 WriteFile,来使用外设。
驱动程序的宿主
如果要运行DLL中的代码,那么必须先有一个EXE 如果要运行DLL中的代码,那么必须先有一个EXE 进程,把该DLL加载到自己的地址空间内,然后才可 进程,把该DLL加载到自己的地址空间内,然后才可 执行DLL中的代码。 执行DLL中的代码。 Windows CE的驱动程序也必须被其他EXE——宿主 CE的驱动程序也必须被其他EXE——宿主 加载
开发工具
• Platform Builder • Visual Studio 2005 • eMbedded Visual C++(EVC)
通用的流接口驱动
编写流接口驱动的步骤:
– 选择定义一个设备文件名; – 实现所需流接口函数; – 创建驱动的模块定义文件(.def),导出必要 的标准流接口函数; – 编辑必要的注册表键值,以加载流接口驱动。
设备文件名
• 流接口驱动作为一个特殊的设备文件系统; • 两种不同的设备文件的命名方式:
– 传统方法:前缀+索引+冒号 • 例:“COM1:”,“LED1:”
– 前缀
• 三个大写字母 • 存储在驱动程序对应注册表键的“Prefix”子键中
– 索引
• 区分同一个驱动程序管理的不同设备 • 缺省:0~9,可通过“index”的值指明起始索引数 – 适合大多数流式驱动,最大只能指定10个设备;
单层驱动 VS 分层驱动
MDD (Model Device Driver)和PDD (Platform Dependent Driver)的概念,这是从驱动代码实现的结构来 区分的。Windows CE的驱动可以是单层的,也可以是 PDD+MDD,没有硬性规定。 一般来说,单层结构的驱动执行效率更高,而分层结构 的驱动方便代码维护和移植。拿串口驱动来说,完全可以 采用单层结构,而把它分为PDD和MDD,作为一般的开发者, 只需实现PDD层就可以了,MDD层由微软实现。这样,驱动 开发的工作量少很多,而代码的可靠性则有了更好的保证。 至于采用哪一种结构的驱动,主要根据开发人员的需求。