当前位置:文档之家› WinCE 6.0设备驱动程序基本知识

WinCE 6.0设备驱动程序基本知识


设备驱动程序基础
b)
混合驱动程序
同样使用两层的MDD/PDD模型,这意味着会持续使用MDD, 也就是对于所有的PDD来说都使用相同的MDD,但是这个 MDD还提供了额外的独特功能(这个功能是给定设备类型的 MDD/PDD实现的一种逻辑扩展)。
使用混合驱动程序的优点: 使用混合驱动程序的优点:与分层架构相同。
接上页... 接上页...
这种架构通常在下列情况中使用: 当某个设备类型没有可用的分层模型时; 当设备硬件是不常见的定制硬件时; 当没有可以重用的分层驱动程序代码时; 当使用MDD/PDD模型,但不能达到需要的效率水平时。 当使用MDD/PDD模型,但不能达到需要的效率水平时。 优点: 可以避免在各个层之间切换,并且能最大化使用硬件,这些都 优点: 带来了高效率。
XXX_Seek
— 调用SetFilePointer函数时调用此函数 调用SetFilePointer函数时调用此函数
实现流接口驱动程序
XXX_IOControl
— 调用DeviceIoControl函数时调用此函数 调用DeviceIoControl函数时调用此函数 — 提供了支持自定义驱动程序操作的机制 — 大多数驱动程序都具有的多用途函数 — 通过I/O控制代码来识别具体的操作 通过I/O控制代码来识别具体的操作 — I/O控制代码是每个设备特定的 I/O控制代码是每个设备特定的
设备驱动程序基础
GWES(图形、窗口以及事件子系统) GWES(图形、窗口以及事件子系统):
支持窗口、对话框、控件、菜单、以及其他和用户界面相关的资源。控 制窗口管理器和窗口消息管理器,包括键盘消息、鼠标消息、触摸屏消 息等等。 GWES(gwes.dll)模块会加载由本系统独占使用的设备驱动程序,也就 是下列以任何方式与用户界面相关联的驱动程序:键盘、视频适配器、 触摸屏、打印机、鼠标。
设备驱动程序基础
2.
加载模块
在Windows Embedded CE中,下列三个模块(内核的一部分)可以加 CE中,下列三个模块(内核的一部分)可以加 载驱动程序: Device.dll: Device.dll:由设备管理器(Device Manager)处理,并被称为流驱动 程序(Stream Driver)。 Gwes.dll: Gwes.dll:由GWES处理,并被称为原生驱动程序(Native Driver)。 FileSys.dll: FileSys.dll:由文件系统处理。
注意:在函数名中,前缀XXX是一个占位符,用于表示三个字母长度的驱动程序 注意:
名称。
实现流接口驱动程序
XXX_Open
— 当使用设备名称调用CreateFile函数时,调用这个函数。 当使用设备名称调用CreateFile函数时 调用这个函数。 函数时, — 为其他IO函数的使用提供设备句柄。 为其他IO函数的使用提供设备句柄 函数的使用提供设备句柄。 — 为开放上下文分配资源,并为操作做准备。 为开放上下文分配资源,并为操作做准备。
原生设备驱动程序: 原生设备驱动程序:
典型的原生CE驱动程序支持输入和输出外围设备,例如显示器驱动程序、键盘驱动程 序、触摸屏驱动程序。 图形、窗口以及事件子系统(GWES)会直接加载和管理这些驱动程序。 原生驱动程序会根据它们的用途实现特定的函数,GWES可以通过调用GetProcAddress 这个API函数来判定这些特定的函数。
实现流接口驱动程序
XXX_PowerDown
— 当OS正在挂起时用于通知设备的回调函数 OS正在挂起时用于通知设备的回调函数 — 为了进入低功耗模式,允许驱动程序执行任何必要的操作 为了进入低功耗模式,
XXX_PowerUp
— 当OS正在恢复运行时用于通知设备的回调函数 OS正在恢复运行时用于通知设备的回调函数 — 为了离开低功耗模式,允许驱动程序执行任何必要的操作 为了离开低功耗模式,
为了使设备管理器能够成功地加载和管理流驱动程序,流驱动程序必须导出一个 通用的接口,被称为流接口。 流接口由12个函数组成,用于初始化和打开设备,读写数据,使设备上电或掉电, 关闭和反初始化设备。 XXX_Init XXX_PreDeinit XXX_Deinit XXX_Open XXX_Close XXX_PreClose XXX_IOControl XXX_Read XXX_Write XXX_Seek XXX_PowerUp XXX_PowerDown
驱动程序是一种向操作系统(OS)提供物理设备或虚拟设备的 驱动程序是一种向操作系统(OS)提供物理设备或虚拟设备的 操作接口的软件。 操作系统期望驱动程序能够实现一个预定义的接口,这样便可 以为具体的硬件或设备的虚拟实现创建抽象。 设备驱动程序包含了硬件特定代码,除了CE自带的标准驱动程 设备驱动程序包含了硬件特定代码,除了CE自带的标准驱动程 序之外,我们还可以实现自定义的驱动程序以支持额外的外围 设备。 设备驱动程序是一个动态链接库(DLL),它可以在底层硬件 设备驱动程序是一个动态链接库(DLL),它可以在底层硬件 和运行在目标设备上的OS以及应用程序之间提供一个抽象层。 和运行在目标设备上的OS以及应用程序之间提供一个抽象层。
提问时间
你可以回答下面的问题么:
1.
在分层驱动程序架构中,通常需要修改哪一层?
2.
哪个模块负责加载流驱动程序? b/w MDD层 - OS和MDD层 - PDD层的接口名称是什么? MDD层 OS和MDD层 PDD层的接口名称是什么?
3.
2.
实现流接口驱动程序
实现流接口驱动程序
流接口API 流接口API
设备驱动程序基础
设备驱动程序分类
实现架构 分层驱动程序 单层驱动程序 混合驱动程序 加载模块 设备管理器(device.dll) 设备管理器(device.dll)— 流驱动程序。 GWES(gwes.dll) 只由图像、窗口以及事件子系统(GWES) GWES(gwes.dll)— 只由图像、窗口以及事件子系统(GWES) 使用的原生驱动程序。 文件系统(filesys.dll) 文件系统(filesys.dll)— 文件系统的驱动程序。 加载到内存 内核(Kernel)内存 内核(Kernel)内存 用户(User)内存 用户(User)内存 系统加载时机 系统启动时 发生请求时
缺点:构建一个单层驱动程序是最复杂的任务之一,会增加开发的成 缺点: 本与时间。
接上页... 接上页...
单层与分层驱动程序架构
设备驱动程序基础
Windows Embedded CE中包含大多数驱动程序的目录: CE中包含大多数驱动程序的目录: 表格:包含驱动程序的目录 表格:
目录 \PUBLIC\COMMON\OAK\DRIVERS\
设备驱动程序基础
支持设备类型
串行端口 视频适配器 网络卡 触摸屏 键盘 鼠标 人机接口设备(HID),等等... 人机接口设备(HID),等等...
设备驱动程序基础
1.
实现架构:
WinCE同样在基本设计上定义了3 WinCE同样在基本设计上定义了3种类型的设备驱动程序。
a)
分层驱动程序
Windows Embedded CE支持一种分层的驱动程序架构,它基于模型设备驱动程序 CE支持一种分层的驱动程序架构,它基于模型设备驱动程序 (MDD)和平台依赖驱动程序(PDD)。 MDD)和平台依赖驱动程序(PDD)。 PDD
Windows Embedded CE 6.0
设备驱动程序 基础知识
Bean Young
主题… 主题…
1. 2. 3. 4. 5.
设备驱动程序基础 实现流接口驱动程序 配置与加载驱动程序 在设备驱动程序中实现中断机制 为驱动程序实现电源管理
1.
设备驱动程序基础
设备驱动程序基础
什么是设备驱动 程序
文件系统: 文件系统:
文件系统负责对象存储、注册表、CEDB数据库、以及系统初始化。 文件系统(filesys.dll)模块会加载文件系统驱动程序。文件系统驱动程序 作为一个DLL实现,它实现了一个预定义的函数集合与IOCTL控制代码 集合。文件系统驱动程序将设备注册成一个文件,这样便可以通过使用 一个标准的文件系统应用程序接口(API)来调用这些函数。
描述 包含与平台无关的驱动程序, 通常是总线驱动程序以及分 层驱动程序的MDD部分。 包含片上系统(SOC)外围 设备所使用的驱动程序实现。 包含指定平台的驱动程序实 现以及分层驱动程序的PDD 部分。
\PLATFORM\COMMON\SRC\SOC\ \PLATFORM\<PLATFORM_NAME>\SRC\DRIVERS
设备管理器
Windows Embedded CE的设备管理器是一个OS组件,它负责管理 CE的设备管理器是一个OS组件,它负责管理 系统上的流设备驱动程序。在引导进程期间,OAL(oal.exe)会 系统上的流设备驱动程序。在引导进程期间,OAL(oal.exe)会 加载内核(kernel.dll),然后内核又会加载设备管理器。特别地, 加载内核(kernel.dll),然后内核又会加载设备管理器。特别地, 内核会加载设备管理器的外壳程序(device.dll),然后这个外壳 内核会加载设备管理器的外壳程序(device.dll),然后这个外壳 程序会转而加载设备管理器的核心程序(devmgr.dll),然后这个 程序会转而加载设备管理器的核心程序(devmgr.dll),然后这个 核心程序又会负责加载和卸载流驱动程序,并且会成为与流驱动 程序交互的接口。
设备驱动程序基础 MDD: MDD:这是一种常见的设备驱动程序类型,它通常向操作系统 提供必需的设备驱动程序接口(DDI),也就是IOCTL代码和 函数的定义集合。 为了与PDD层进行交互,MDD同样定义了中断服务线程(IST) 为了与PDD层进行交互,MDD同样定义了中断服务线程(IST) 和设备驱动程序服务接口(DDSI)。 和设备驱动程序服务接口(DDSI)。 PDD:PDD库实现了一些实际的函数,以便和硬件进行通信, 并通过预定义的函数集合(DDSI)向MDD层提供信息。 DDSI MDD 使用分层架构的优点: 使用分层架构的优点: 代码重用 更低的开发开销和成本 在为客户修正QFE时,可以节省时间,提高开发效率 在为客户修正QFE时,可以节省时间,提高开发效率 通常只需要自己开发实现PDD层,并使用已有的公共MDD层 通常只需要自己开发实现PDD层,并使用已有的公共MDD层 实现
相关主题