Windows CE驱动程序
Windows ce驱动程序设计

小 内存 体 积 占用进 行 的优化 , 具有 实 时 内核 , 健 的 内 强
存 管 理 , 进 的 电源 管理 , 先 开放 的通 信平 台 , 程 系统 远 管理 , 标 准 的支 持 , 泛 的存 储 和 文 件系 统 , 对 广 预先 构 建 的服务 器服务 , 加安 全可 靠 的连接 。 更 要 使 基 于 W id wsc n o a的 系 统 能 正 常工 作 , 须 必
t oc s ofd veop ng de ie d ie a n he i t nc fs ra rve . he pr es e l i vc rv r t ki g t ns a e o e ild i r
KEYW ORDS W i d ws c , d i e r g a , s r a it ra e,s ra n o a rv r p o r m t e m n e fc e il
维普资讯
W id ws a驱 动 程 序 设 计 no c
文 苹 编 号 : 0 35 5 ( 0 8 0 — 0 4 0 10 -8 0 2 0 ) 70 1— 3
Wid wsc 动 程序 设 计 n o e驱
Pr g a m i f De i e Dr v r b s d o i o e o rm ng o v c i e a e n W nd ws c
为 系统的 各种 设备 提供 驱动 程序 。有 时 硬件 厂商 不提 供 基 于 Wid wsc n o a的驱 动 程 序 , 软 提 供 的 样 本 驱 微
动 程 序也 不 能 满 足需 求 , 时 就需 要 根 据 自己特 定 的 这 硬件平 台进行 基于 Wid wsc n o a的驱动 程 序开发 。 当要解 决硬 件平 台同操 作 系统 内核 和应用 程序 调
Windows+CE操作系统介绍

Pocket PC2000
Pocket Pocket PC2002 PC2003
Mobile 5.0
Mobile 6.0
Mobile7
2000年4月2001年10月 2003年6月 2005年5月 2007年2月
2008年底
WinCE1.0
WINCE1.0是一种基于Windows95的操作系 统,其实就是单色的Windows95简化版本。90 年代中期卡西欧推出第一款采用WinCE1.0操作 系统的蛤壳式PDA,算是第一家推出真正称得 上手掌尺寸的掌上电脑厂商。作为第一代的 WinCE1.0于1996年问世,不过它最初的发展并 不顺利。当时Paim操作系统在PDA市场上非常 成功,几乎成为了整个PDA产品的代名词,在 这种情况下,微软公司被迫为最初WinCE的不 断改进的同时,微软公司也通过游说、技术支 持、直接资助等手段聚集了大量合作厂商,使 WinCE类的PDA阵容越来越强大。
驱动程序开发
(USB Host、Smart Card 、 Serial 、 PC Card 、 Audio 、 Networking……)
机顶盒 瘦客户机
数字媒ห้องสมุดไป่ตู้适配器
IP 语音(VoIP)电话 导航设备 医疗设备 便携式媒体播放器 家庭网关 数码相机 网络数字电视 PDA
Windows CE支持CPU类型
• • • • ARM X86 SH4 MIPS
Win CE和Windows Mobile关系
wince6.0
wince 6.0是微软于06年11月份推出的,也 是目前wince的最高版本。微软在wince 6.0 推出时宣布完全公开内核源代码,这是微 软难得的大动作,主要是迎击Linux、Wind River阵营长期以来对其定制化不足的攻击。 微软硬件合作伙伴可以修改源代码开发定 制化的文件系统、设备驱动程序与其他元 件,而不需分享他们的最终设计给微软或 第三方。
Windows CE 6.0下的驱动

Windows CE 6.0 6 0下的驱动 程序新特性何宗键 “微软——同济”移动与嵌入式中心 同济大学软件学院 济大学软件学院点击添加MSN机器人小新 为您收听下载MSDN中文网络广播课程加油助力!本次课程内容包括• 驱动程序开发简介 • CE 6.0的新内核架构对驱动程序的影响 • 内核模式驱动 VS 用户模式驱动 • 管理缓冲区 • 驱动程序的移植收听本次课程需具备的条件• 有过Windows CE 5.0开发经验 发经验 • 最好熟悉驱动程序开发 • 对CE 6内核有所了解Level 300驱动程序是什么?Application Driver Win CE OSDevice驱动程序是对物理或虚拟设备的抽象回顾驱动程序的基本知识z Native vs Stream ¾ 谁加载该驱动程序 (Who) z 单体 vs 分层 分层(MDD / PDD) ¾ 驱动的结构如何设计 (How) z Built In vs 动态加载 ¾ 驱动何时加载 (When) z Miniport、Wave、Touch ¾ 驱动的模型是什么样子 (What) z 内核驱动 vs 用户驱动 (新) 新 ¾ 在哪里加载驱动 (Where)回顾Windows CE 5的内存架构2 GB Kernel SpaceKernelLarge Memory AreaSlot 32 Slot 31 : : Slot 7 Slot 6 Slot 5 Slot 4 Slot 3 Slot 2Slot 1 – ROM DLLs Slot 0 – ExecutionSingle 2 GB VM for all Processes31 Slots for ProcessesExecution SlotWindows CE 6.0之后的内存模型2 GB Kernel SpaceKernel Filesystem y GWES Drivers2 GB p per ProcessProcess Code User VM32 K ProcessWindows CE 6中的两种驱动User r Memor ry Spac ceServicesD.EXE Windows CE Shell Application Service 1 Service n Udevice.EXE Udevice.EXE User Mode Driver 1 User Mode Driver nMarshalling Kernel Me K emory SpaceWin32 CE APIs – COREDLL / WINSOCK / COMMCTRL / COMMDLGKERNEL.DLLDEVMRG.DLL GWES.DLL DriversFILESYS.DLL FSDMGR.DLLNetworking DLLsOALK.COREDLL.DLL内核态驱动——新瓶装旧酒z 默认的驱动模式 z 在内核地址空间中运行 z 与内核模式的coredll, coredll k.coredll.dll k coredll dll链接 ¾自动完成,无需更改构建规则 z 效率高 ¾快速访问内核API ¾直接同步访问用户的缓冲区 z 稳定压倒一切! 稳定压倒 切! ¾驱动Crash可能会导致内核崩溃——用户态驱动老革命遇到新问题Reflector服务用户模式驱动程序加载User Mode Driver Host ProcessUser Application User Mode Driver 8ActivateDeviceEx XXX_Init(…) 1udevice.exe User Mode Driver User ModeActivateDeviceEx CreateProcess(,,Volume Name)10HANDLE Returned 39Kernel Mode 47Device Context XXX_Init forwarded to UM Driver HostReflector Service Device Manager 2569HANDLE Parent Bus Driver110HANDLE Returned用户模式驱动注册表p[HKEY_LOCAL_MACHINE\Drivers\ProcGroup_0003]"ProcName"="udevice.exe""ProcVolPrefix"="$udevice"[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Ethman]"Prefix"="ETM""Dll"="ethman.dll""Index"=dword:1; WZCSVC must be started before ethman"Order"=dword:2A; Flags==12 is DEVFLAGS_LOADLIBRARY and DEVFLAGS_LOAD_AS_USERPROC; Flags12 is DEVFLAGS LOADLIBRARY and DEVFLAGS LOAD AS USERPROC"Flags"=dword:12"UserProcGroup"=dword:3 ;// default to group 3BIB文件的改变深入理解:请参考共享源代码缓冲区管理原因——内核驱动缓冲区管理原因——用户驱动缓冲区管理的内容:指针参数与嵌套指针处理调用者缓冲区–列集方法列集之——同步或异步访问CeOpenCallerBufferCeAllocAsynchronousBuffer处理调用者缓冲区–安全拷贝安全拷贝的方法z CeOpenCallerBufferz CeAllocDuplicateBuffer处理缓冲区的API z CeOpenCallerBufferz CeCloseCallerBuffer处理缓冲区的APIz CeAllocAsynchronousBufferz CeFreeAsynchronousBuffer处理缓冲区的APIz CeAllocDuplicateBufferz CeFreeDuplicateBuffer用户态驱动程序的限制用户态驱动程序的限制内核态驱动的限制CeCallUserProc内核模式驱动用户模式驱动同步异步同步异步参数不需使CeAllocDuplicateBuffer 不需要使用CeAllocDuplicateBuf 列表中的指针要用CeFreeDuplicateBuffer fer CeFreeDuplicateBuff er嵌不CeOpenCallerB ffer CeOpenCallerB CeOpenCallerB ffer 入到结构体需要使用CeOpenCallerBuffer CeAllocAsynchronousB uffer C h uffer CeCloseCallerB ff CeOpenCallerBuffer CeAllocAsynchrono usBuffer C h 中的指针CeFreeAsynchronousBu ffer CeCloseCallerBuffer uffer CeFreeAsynchronou sBuffer CeCloseCallerBuffer深入理解:请参考共享源代码CE Base Team Blog: Windows Base Team Blog: Marshal Helper API:驱动程序的移植DEMO使用CEAppCompat工具检查应用程序的兼容性。
嵌入式系统软件开发技术BSP和驱动

编写BSP函数
BSP对板卡中每个芯片的操作都通过多个函数 来完成
如果应用程序对板卡的操作都直接通过调用 BSP中的函数来完成,那将很不利于源程序的 调试 ,并降低了程序的可移植性
把能完成某个特定功能的函数封装在一个库文 件中,并放在应用程序与BSP之间
对每个芯片来说,都应当有初始化函数和状态 读取函数
Linux驱动程序的加载方式
驱动程序直接编译入内核
驱动程序在内核启动时就已经在内存中 可以保留专用存储器空间
驱动程序以模块形式存储在文件系 统里,需要时动态载入内核
驱动程序按需加载,不用时节省内存 驱动程序相对独立于内核,升级灵活
Linux驱动程序模块加载
Linux驱动程序开发的任务
Linux驱动程序开发的任务
移植驱动程序到新的平台
GPL对驱动程序开发的影响
实现非GPL授权的方法——模块形 式动态加载
驱动程序可以以私有产权形式进行 商业授权
设备驱动程序的代码
驱动程序的注册与注销
register_chrdev() register_blkdev()
设备的打开与释放
Linux驱动程序的开发环境
本机编译调试
开发环境配置简单 无需网络环境 适用于配置较高的x86机器
主机+目标机
主机可以自由选择Linux或Windows+Cygwin 主机和目标机通过网络共享文件系统 内核崩溃不会影响主机
Linux驱动程序的开发环境(续)
主机+目标机环境包括 主机运行的工具链∶cross gcc + glibc + gdb, 如果是windows主机还要有cygwin仿真环境 主机运行远程服务,常用的有tftp用来传送内 核映像、initrd,NFS用来共享文件系统 目标机运行ssh或telnet等远程登陆服务,用来 调试驱动程序
六.Windows CE平台搭建

Windows CE的烧写
Jtag烧写方式 USB烧写方式 网络烧写
强调:对于这块TQ2440板子的内核烧写, 我们采取的是USB烧写方式。其他的烧写 方式大家感兴趣的话可以在网上搜索相关 的资料来尝试。
Windows CE的串口调试工具
Windows Embedded CE是微软公司嵌入式、移 动计算平台的基础,它是一个开放的、可升级 的32位嵌入式操作系统。 CE中的C代表袖珍(Compact)、消费 (Consumer)、通信能力(Connectivity)和 伴侣(Companion);E代表电子产品 (Electronics)。 WinCE不仅继承了传统的Windows图形界面,并 且在WinCE平台上可以使用Windows95/98上的 编程工具、使用同样的函数、使用同样的界面 风格,使绝大多数的应用软件只需简单的修改 和移植就可以在WinCE平台上继续使用。
综上所述
1. BSP是板级支持包,与你做的或要编程的硬件有 关,由硬件厂商提供。 2. PB需要BSP来配置硬件平台驱动。 3. PB下编译BSP通过后,可以导出和BSP相关的 SDK供EVB/EVC编程用。同时,生成NK.bin映 像文件,NK烧写到供嵌入式系统硬件平台的启 动介质,通过引导启动WinCE系统。 4. WinCE下面的应用程序可以通过注入EVC的开发 工具开发。 5. EVC在编译的时候需要选择硬件平台,由SDK提 供。
2. 还是靠同步功能,不过不是用EVC的自动发送了, 而是直接通过PC上面虚拟的移动设备复制到开 发板的指定目录下,然后在开发板端执行。
3. 从PC端复制编译出来的应用程序到U盘中,然后 再将U盘中的应用程序复制到开发板端。 4. 将编译好的应用程序复制到BSP包中的“Files” 目录下,然后修改“Files”目录下的 “platform.bib”文件,参考如下所示格式添加到 FILES栏目下:
wince 4.2

Windows CE .NET 4.2 产品概述一、介绍Microsoft® Windows® CE .NET是Windows CE 3.0的后续产品,它不仅是一个功能强劲的实时嵌入式操作系统,而且提供了众多强大工具,允许用户利用它快速开发出下一代的智能化小体积连接设备。
借助于完善的操作系统功能和开发工具,Windows CE .NET为开发人员提供了构建、调试和部署基于Windows 的定制设备所需的一切特性。
平台开发工具Platform Builder是一个完全集成的开发环境(IDE),并且包括一个软件开发工具包(SDK)导出工具。
Windows CE .NET支持Microsoft eMbedded Visual C++®和Microsoft Visual Studio® .NET,为面向Microsoft .NET Compact Framework (Microsoft .NET Framework的一个子集)的Web服务和应用程序开发提供了一个完整的开发环境。
利用这些工具,开发人员可以迅速开发出能够在最新硬件上运行各种应用程序的智能化设计。
作为最新版本,Windows CE .NET 4.2对Windows CE先前版本的强大功能进行了进一步的扩充和丰富,它提供了:●对安全和可伸缩网络的支持●得到增强的实时处理能力●更为优秀的性能表现●更为丰富的多媒体和Web浏览功能●与个人计算机、服务器、Web服务以及其它设备更为出色的互操作性欢迎阅读本文,全面了解Windows CE .NET 4.2带给我们的丰富功能和精彩技术。
Windows CE .NET将帮助您一步一个脚印地走向出美好的未来。
二、功能和技术概览三、技术组件作为Windows CE .NET的最新版本,Windows CE .NET 4.2为用户开发独具创新的解决方案和交付个性化的用户体验提供了必需的强大技术和工作效率。
winCE嵌入式操作系统介绍

Windows CE 嵌入式系统Windows CE是Microsoft公司的嵌入式操作系统产品。
它是一个紧凑、高效和可扩展的操作系统,具有多线程、多任务、确定性的实时和完全抢先式优先级的操作系统环境,适合于只有有限硬件资源的硬件系统。
操作系统的定制采用模块化设计方式,便于用户的使用。
支持Win32 API和MFC,具有Windows程序设计经验的用户可迅速掌握其编程方法。
第一章绪论BSPBSP是介于主板硬件和操作系统之间的一层,也可以说是操作系统的一部分,主要目的是为了支持操作系统,使之能够正常地在主板上运行.“嵌入性”、“专用性”和“计算机系统”是嵌入式系统的三个基本要素。
一般情况下,嵌入式操作系统可分为两类:一类是面向控制和通信等领域的实时操作系统,如WinRiver公司的VxWorks、ISI公司的pSOS、QNX公司的QNX和ATI的Nucleus等.另一类是面向消费电子产品的非实时操作系统,Windows CE是一个实时操作系统.实时支持功能在以下几个方面提升了Windows CE的性能.(1)支持嵌套中断(2)允许更高优先级别的中断首先得到响应,而不是等待低级别的中断服务线程(IST)(3)更好的线程响应能力(4)对高级别中断服务线程的响应时间上限的要求更加严格,在线程响应能力方面的改进,可帮助开发人员掌握线程转换的具体时间,并通过增强的监控能力和对硬件的控制能力帮助开发人员创建更好的嵌入式应用程序.(5)更多的优先级别,256个优先级别可使开发人员在控制嵌入式系统的时序安排方面有更大的灵活性.(6)更强的控制能力,对系统内的线程数量的控制能力可使开发人员更好地掌握调度程序的工作情况.5 丰富的多媒体和多语言支持第二章Windows CE的体系结构和功能2.1 Windows CE的层次结构2.2 进程、线程与调度2.3 内存管理2.4 存储管理与文件系统2.5 用户界面与图形系2.1.1 微内核结构Windows CE属于比较典型的微内核操作系统在内核中仅仅实现进程、线程、调度及内存管理等最基本的模块,而把图形系统、文件系统及设备驱动程序等等都作为单独的用户进程来实现.这样做显著地提高了系统的稳定性和灵活性.操作系统的结构可分为单体内核结构和微内核结构.传统的UNIX 是单体内核操作系统的代表.单体内核操作系统将图形、设备驱动及文件系统等功能全部在操作系统内核中实现,运行在内核状态和同一地址空间.其优点是减少了进程间通信和状态切换的系统开销,获得较高的运行效率;缺点是内核庞大,占用资源较多且不易剪裁,一旦每个驱动程序出错,就会导致整个系统的崩溃,系统的稳定性、安全性不好.与此相反,微内核系统在内核中只实现那些必须由内核实现的基本功能,而将图形系统、文件系统、设备驱动及通信等功能在内核之外,以系统服务的形式提供各种功能.这种结构的优点是有一个精炼的内核,便于剪裁与移植,而且由于系统服务程序运行在用户地址空间,因而个别驱动程序的错误不至于导致整个系统的崩溃;其不足之处是在运行中用户状态和内核状态频繁地切换,从而导致系统效率不如单体内核.微内核结构用一个水平分层的结构代替了传统的纵向分层的结构。
Windows CE.net设备驱动程序开发研究

p e ito u e h e e o me t r c s f e ie d v rfrW i d wsCE. i , r d c st e d v l p n o e so vc r e o n o n p d i Ke r s: y wo d Emb d e p r t g s s m ; a v e i e d i e ; t a d vc r e ; a e e r e ; e d do ea n yt i e N t e d vc rv r S r m e ie d i r L y rd d v r i e v i
Mo o i i rv r n lt c d i e h
1 引 言
wid w C . E n 0 s E N T是 Mirsf 全 新 设 计 开 发 的 coo t
Widw E N T支 持 两 种 驱 动 程 序 模 型 : 地 驱 no sC . E 本 动程 序 ( a v ei r es 和 流 接 口驱 动 程 序 ntedv ed vr) i c i (t a ei r es 。本 地驱 动程 序是 指驱动 程 sems vc d vr) r d e i 序作 为操 作 系统 平 台 的 一 个部 件 实 现 , 于原 始 开 用 发商 集成 在 Widw E平 台 内的设 备 , L D、 no sC 如 C 键
盘、 C卡插槽 等 , 系统启动 时必须加载 的设 备。 P 是 流接 口驱动 程 序 是 用 户 一级 的 动态 链 接 库 ( L ) DL , 用 于驱 动可 安 装 的外 围设 备 , 打 印机 和 P 如 c卡 设 备等 , 由设备管理程序 自动检测并动态加载 。所有 的流接 口驱 动 程序都 要 提供 相似 的流接 口函数供 应 用程序调用 , 本地驱动程序则提供定制的接 口, 各种 本地驱动程序一般不会采用相同的接 口。图 2 显示 了 Widw E驱 动程 序 系统 结构 。 no s C
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Windows CE驱动程序模型 CE驱动程程序模型
在Windows CE下,所有的驱动程序都以用户态下的 CE下 所有的驱动程序都以用户态 用户态下的 DLL文件形式存在。 DLL文件形式存在。 文件形式存在
编写Windows CE驱动程序用到的方法及工具与编写其 编写Windows CE驱动程序用到的方法及工具与编写其 他任何一个普通的DLL一样 一样。 他任何一个普通的DLL一样。
给操作系统和驱动程序带来了很大的灵活性。 给操作系统和驱动程序带来了很大的灵活性。操作系统 可在运行时动态地加载所需要的驱动程序, 可在运行时动态地加载所需要的驱动程序,可轻松实现外 设的即插即用 即插即用(Plug Play)。 设的即插即用(Plug & Play)。 驱动程序放在用户态而不是核心态来实现, 驱动程序放在用户态而不是核心态来实现,也增强了系 统的稳定性。驱动程序的崩溃不会影响到操作系统内核。 统的稳定性。驱动程序的崩溃不会影响到操作系统内核。 驱动程序放在用户态下可给驱动开发人员提供便利。 驱动程序放在用户态下可给驱动开发人员提供便利。
Device.exe 又称做设备管理器。负责加载和管理 又称做设备管理器。 Windows CE下绝大多数的设备驱动程序。 CE下绝大多数的设备驱动程序 下绝大多数的设备驱动程序。 GWES.exe负责加载一些与图形界面相关的 设备驱动。 GWES.exe负责加载一些与图形界面相关的I/O设备驱动。 负责加载一些与图形界面相关的I/O设备驱动 FileSys.exe在系统中负责管理 FileSys.exe在系统中负责管理Windows CE中的对象存 在系统中负责管理Windows CE中的对象存 储和文件系统。负责加载所有的文件系统驱动程序。 储和文件系统。负责加载所有的文件系统驱动程序。
参见文档: 参见文档: http://msdn2.micr //enus/library/aa4475 11.aspx
示例驱动程序的代码
Platform Builder中自带了大量的驱动程序代码, Builder中自带了大量的驱动程序代码 中自带了大量的驱动程序代码, 可以通过阅读这些代码来学习编写驱动程序。 可以通过阅读这些代码来学习编写驱动程序。 大部分驱动程序的代码放在目录 %_WINCEROOT%\Public\Common\OAK\ %_WINCEROOT%\Public\Common\OAK\Driv ers下,这些驱动程序都是与平台无关的。 ers下 这些驱动程序都是与平台无关的。 %_WINCEROOT%\Platform\ %_WINCEROOT%\Platform\<BSP Name>\src\drivers\ Name>\src\drivers\中,这些驱动都是与平台相关 的。 CE5.0开始 开始, 从Windows CE5.0开始,微软引入了 ProductionProduction-Quality Device Driver的概念。主 Driver的概念 的概念。 要是为了提高驱动程序代码的可靠性和稳定性。 要是为了提高驱动程序代码的可靠性和稳定性。
Windows CE驱动程序模型 CE驱动程序模型
桌面Windows驱动程序模型 桌面Windows驱动程序模型
操作系统在启动后对硬件进行延迟加载,但依 操作系统在启动后对硬件进行延迟加载, 然把驱动程序加载道操作系统的内核空间中。 然把驱动程序加载道操作系统的内核空间中。驱 动程序工作在系统的地址空间内, 动程序工作在系统的地址空间内,实现了驱动的 动态加载。 动态加载。
分层驱动程序
优点
驱动程序分层带来了一定的灵活性, 驱动程序分层带来了一定的灵活性,使驱动程 序的编写更为清晰、简单。 序的编写更为清晰、简单。 驱动程序的移植也会变得相对简单, 驱动程序的移植也会变得相对简单,只需对 PDD层的代码进行修改 PDD层的代码进行修改。 层的代码进行修改。
缺点
分层后,MDD层对PDD层的函数调用会给驱动 层对PDD层的函数调用会给驱动 分层后,MDD层对 程序带来额外的性能开销。 程序带来额外的性能开销。
分层驱动程序把驱动程序的代码分为两层: 分层驱动程序把驱动程序的代码分为两层:
模型设备驱动(Model 模型设备驱动(Model Device Driver,MDD):包 Driver,MDD):包 含某一类型的驱动程序所通用的代码。 含某一类型的驱动程序所通用的代码。 平台相关驱动(Plat 平台相关驱动(Plat Dependence Driver,PDD): 包含特定的硬件或平台专用的代码。 包含特定的硬件或平台专用的代码。
分层驱动程序
MDD和PDD之间还需要一个接口协议 MDD和PDD之间还需要一个接口协议。这 之间还需要一个接口协议。 在分层驱动程序中, 样,在分层驱动程序中,就有两类接口函数
在操作系统与MDD之间的 在操作系统与MDD之间的DDI(Device Driver 之间的DDI(Device Interface) MDD和PDD之间的 MDD和PDD之间的DDSI(Device Driver 之间的DDSI(Device Service provider Interface)
分层驱动程序
MDD 具有下列特征: 具有下列特征:
包含给定类型的所有驱动程序所共有的代码。 包含给定类型的所有驱动程序所共有的代码。 调用 PDD 函数以访问硬件。 函数以访问硬件。 链接到 PDD 层,并且定义MDD 期望在该层中调用的设备驱动程序 并且定义MDD 函数。 服务提供程序接口 (DDSI) 函数。 向操作系统 (OS) 公开设备驱动程序接口 (DDI) 函数。 OS 的其他 函数。 部分可以调用这些函数。 部分可以调用这些函数。 处理中断处理。 处理中断处理。 可供开发人员重用。 可供开发人员重用。 可以链接到多个 PDD。 PDD。 通常不需要进行更改。 如果进行了更改,则在将驱动程序迁移到 通常不需要进行更改。 如果进行了更改, 将来的版本时可能会遇到麻烦。 将来的版本时可能会遇到麻烦。 包含任何中断服务线程 (IST)。 (IST)。
Windows CE驱动程序 CE驱动程序
Windows CE驱动程序 CE驱动程序
Windows CE驱动程序模型 CE驱动程序模型 Windows CE驱动程序的宿主 CE驱动程序的宿主 Windows CE驱动程序的类型 CE驱动程序的类型 Windows CE驱动程序的分类 CE驱动程序的分类 示例驱动程序的代码
分层驱动程序
PDD 具有下列特征: 具有下列特征:
由硬件平台特有的代码组成。 由硬件平台特有的代码组成。 对于不同的硬件产品或标准,有不同的实现。 对于不同的硬件产品或标准,有不同的实现。 只能与某一类MDD协同工作。 只能与某一类MDD协同工作。 协同工作 实现MDD所需要的 实现MDD所需要的DDSI函数 所需要的DDSI函数
与所有的Win32 DLL一样 与所有的Win32 DLL一样,Windows CE驱动程序DLL 一样, CE驱动程序 驱动程序DLL 中的代码被一些进程动态加载到地址空间, 中的代码被一些进程动态加载到地址空间,运行在用户态 下。
Windows CE驱动程序模型 CE驱动程序模型
Windows CE驱动程序作为用户态的DLL来 CE驱动程序作为用户态的 驱动程序作为用户态的DLL来 实现的优点: 实现的优点:
Windows CE驱动程序的宿主 CE驱动程序的宿主
如果要运行DLL中的代码,那么必须先有一个EXE 如果要运行DLL中的代码,那么必须先有一个EXE 中的代码 进程,把该DLL加载道自己的地址空间内 加载道自己的地址空间内, 进程,把该DLL加载道自己的地址空间内,然后才可 执行DLL中的代码 中的代码。 执行DLL中的代码。 Windows CE的驱动程序也必须被其他EXE——宿 CE的驱动程序也必须被其他EXE——宿 的驱动程序也必须被其他 主加载
Windows CE驱动程序的分类 CE驱动程序的分类
Windows CE 整体上将设备驱动分为三种: 整体上将设备驱动分为三种:
内置驱动 总线驱动 流接口驱动
内置驱动
硬件所必须的驱动程序, 硬件所必须的驱动程序,这些驱动程序通 常由设计OEM厂商进行设计 厂商进行设计。 常由设计OEM厂商进行设计。 键盘,触摸屏,音频设备。 如:键盘,触摸屏,音频设备。 可能不支持一般的驱动接口, 可能不支持一般的驱动接口,也有可能带 有扩展的接口或者完全提供一个用户自定 义的接口。 义的接口。 内置驱动通常需要针对具体的操作系统进 行小幅改动。 行小幅改动。
代码不作分层处理,驱动程序的代码相对紧凑。 代码不作分层处理,驱动程序的代码相对紧凑。 选用单体驱动程序会提高驱动的性能。 选用单体驱动程序会提高驱动的性能。 对于一些较简单的硬件设备驱动程序,使用单体驱动程 对于一些较简单的硬件设备驱动程序, 序模型,可更加清晰明了。 序模型,可更加清晰明了。
分层驱动程序
Windows CE驱动程序的类型 CE驱动程序的类型
Windows CE驱动程序的类型 CE驱动程序的类型 单层驱动程序 分层驱动程序
单体驱动程序
单体驱动程序:就是所有的驱动程序——包括中断 单体驱动程序:就是所有的驱动程序——包括中断 处理、I/O操作及硬件控制等都放在了一起 操作及硬件控制等都放在了一起。 处理、I/O操作及硬件控制等都放在了一起。 DDI接口 DDI接口(Device Driver Interface):单体驱动程 接口(Device Interface): 序暴露的接口, 序暴露的接口,是操作系统与驱动程序交互的接口 协议。 协议。 优点: 优点:
总线驱动
管理系统总线如PCI总线等。 管理系统总线如PCI总线等。 总线等 负责处理总线上硬件的询问, 负责处理总线上硬件的询问,以及资源的 分配。 分配。 同时也请求设备管理器为总线上的硬件安 装适当驱动程序。 装适当驱动程序。