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
WinCE.NET下USB OTG设备驱动程序设计
下USB OTG设备驱动程序设计孔旋,邓中亮北京邮电大学电子电子工程学院计算机应用技术专业,北京(100876)E-mail:kongxuan1982@摘要:本文介绍了USB OTG技术,分析了两用USB OTG设备驱动程序配置模型以及下设备驱动程序模型,并详细介绍了下pl2303的usb转串口桥接器芯片驱动程序的设计与实现。
关键词:USB OTG,,驱动程序1.引言USB,全称是Universal Serial Bus(通用串行总线)。
在1994年年底,由当时的康柏、IBM、Microsoft等多家公司联合发起成立的通用串行总线开发者论坛(USB Implementers Forum,简称USB IF)先后陆续推出了USB0.7、USB1.1、USB2.0规范,其理论传输数率最高可达480Mb/s。
最近,根据现有的USB接口在有线/无线,性能及应用规范上的不同,USB IF将USB接口分为5类,并发布了相应的标识,分别是:Wireless USB、Original USB、Hi-Speed USB、On-The-Go USB及Hi-Speed On-The-Go USB[1] 。
是微软公司向嵌入式领域推出的一款紧凑、高效的32位嵌入式操作系统,具有多任务、实时性、模块化及可伸缩性、强大的通信和多媒体能力等特点[2] ,在移动计算、工业控制和信息家电等诸多领域都有广泛的应用。
本文将通过工具Platform Builder实现TI OMAP850 PDA手机平台下USB OTG设备驱动程序,并实现基于OTG技术的一种应用——在无PC条件下,以PDA手机平台端为USB 主机端的数据通信。
B OTG技术2.1 OTG技术简介USB技术的发展,使得PC和周边设备能够通过较简单、可方便热插拔的方式连接在一起,通过USB总线,在PC的控制下进行数据交换。
但这种方便的数据交换方式,就在不久以前(10年以内),一旦离开了PC,各设备间无法利用USB接口进行操作,因为当时没有任何一种PC以外的其他设备能够充当PC一样的Host。
WindowsCE操作系统
嵌入式系统原理与设计
11.2
Windows CE简介
(2)Handleheld PC 用于迷你笔记型电脑 (3)Auto PC 用于车载电脑、工业控制等。
嵌入式系统原理与设计
11.3
Windows CE的中断处理机制
11.3.1 中断体系结构 11.3.2 中断迟延
嵌入式系统原理与设计
11.3.1 中断体系结构
Windows CE的内存管理
支持32位虚拟内存、按需分配内存 和内存映像文件等。 11.5.1 内存结构 11.5.2 进程地址空间结构 11.5.3 堆和栈的内存分配 11.5.4 内存映射文件
嵌入式系统原理与设计
11.5.1 内存结构
只能管理512MB物理内存和4GB虚存。 对MIPS和SHX系列CPU而言,CE内核可直
嵌入式系统原理与设计
11.6 Windows CE的编程模式
3种模式 11.6.1 基于Win32的程序开发 11.6.2 基于MFC的程序开发 11.6.3 基于 Framework精简版的程序开发
嵌入式系统原理与设计
11.6.1 基于Win32的程序开发
CE的Win32 API比Windows系统下的Win32 API要 少一半API函数。 Win32编程可编写所有运行在CE平台上的程序。 其优点是:
MFC:Microsoft的基本类库。 开发时需要额外的库文件支持,包括CE支持的 所有MFC函数。CE使用的MFC的类大概有160个。 函数。从MFC可直接调用Win32 API。安装了 eMbedded VC++,可找到MFC源代码。 优点: 降低开发难度 缺点: 需要MFC库的支持,应用程序比Win 32模式 大一些。 在CE平台上很容易添加对MFC的支持。
解决Virtual pcwindows CE emulator警告问题
解决Virtual pc/windows CE emulator警告问题开机进入桌面和往常一样弹出了一开一度的,停用的设备或应用程序“Virtual pc/windows CE emulator”会造成windows不稳定。
Windows使这些驱动程序无法加载。
或者Devices or applications disabled'Virtual PC/Windows CE Emulator' will cause Windows to become unstable. Windows has prevented these drivers from loading.警告信息,再弹出一个,Emulator for Windows CEOne or more files from the Emulator for Windows CE installation is missing. Please reinstall Emulator for Windows CE and try again.一直没管它,可是每次都这样看起来很浪费时间,虽然凌晨了也下决心花点时间解决这个问题,我认为所掌握的技术多少不是最重要的,最重要的是面对问题、分析问题、解决问题的能力。
听着黄磊的我想我是海.mp3Start!把问题解决。
My System is WindowsXP sp2 English Pro Edi的所以比较符合微软的RESOLUTION(英文应对方法)。
下面给中文版用户做一下翻译,不是科班出身翻译错了告诉一声。
警告总是让人担心的,先来搞清楚为什么:将,CAUSEThis problem occurs in Windows XP and in Windows XP Service Pack 1 (SP1) because the Windows CE emulators do not work correctly if Physical Address Extension (PAE) mode is enabled. This problem occurs with Windows XP SP2 because Windows XP SP2 does not allow the Virtual PC/Windows CE Emulator driver (VPCAppSv.sys) to load when hardware-based DEP is enabled. This is part of the Windows XP SP2 Driver Protection feature.翻译如下:原因这个问题发生在Windows XP 和Windows XP Service Pack 1 (SP1) Windows CE emulators不能工作正确,是因为物理地址扩展(PAE)模式没有激活。
基于WindowsCE的嵌入式漏磁检测仪ADC驱动程序设计
图 2 流 接 口驱 动程 序 与 操 作 系统 和 硬 件 的关 系
应 用程序 使 用 操 作 系统 提 供 的文 件 AP 函 数 I 对设 备进 行访 问 , 件 AP 被操 作 系统 转 发给 文 件 文 I 系统 。若 文件 系统 发 现是 对 设 备 的操 作 , 会 把 执 就 行 交给设 备管 理器 处 理 , 设备 管 理 器 根据 具 体 的请
术 的不 断 成熟 , 将嵌 入式 系 统应用 于 漏磁 检测 中 , 可 以解 决 工 程 应 用 中 的 实 际 问 题 。笔 者 将 以 wi— n d ws E . o C 5 0为操作 系统 , 用 ¥ C 4 0 处 理 器 的 利 3 24 A A DC进 行漏 磁信 号 的采集 , 在硬 件 平 台构 建 完成 并 之后 , 开发 相关 驱 动程序 。
Ab ta t s r c :Thi pe i s t t u t r hi mbe de g tc fux l a g e tn n t u s pa r g ve he s r c u e oft s e d d ma ne i l e ka e t s i g i s r — me a e n W i do CE n n r uc st e W i o CE viedrv rp og a mod l. ntb s d o n ws a d i t od e h nd ws de c i e r r m e s Thed — e sgn me h fW i o CE t e m n e f c rve s e i t od o nd ws s r a i t ra e d i r i xpo nd d by de i ni g t u e sg n he ADC rv rof d ie ¥3 44 A r e s r The t s e ulss w ha h C2 0 p oc s o . e tr s t ho t t t e ADC i e e i ne y t s me h d i fi drv r d sg d b hi t o s e f— ce nd d p nd bl nd i pr i e od r f r nc ort rv rpr gr m e e o inta e e a e a t ov d s ago e e e e f he d i e o a d v l pme to i — n fsmi
Windows嵌入式开发系列课程(4):Windows CE电源管理
WinCE电源管理李小伟软件应用工程经理上海掌微电子技术有限公司本次课程内容包括z电源管理概要z电源管理驱动程序的实现z内核级电源管理收听本次课程需具备的条件z了解WINCE设备驱动程序开发的一般知识z初步了解WINCE 电源管理驱动Level 200内容¾电源管理概要z电源管理驱动程序的实现z内核级电源管理电源管理驱动的功能z建立一个对整个系统环境,电源状态和设备电源状态的全局了解.可以自定义适合你的电源管理驱动来全局地管理你的平台.z设备驱动的电源管理可以从整个系统电源状态管理中脱离, 自己管理自己的电源状态.z控制系统电源状态切换的过程.电源管理架构在WINCE 中电源管理驱动的位置ApplicationsDevice DriversOS ServicesGWES HAL OEM Adaption Layer withPM supportHardwarePower ManagerDevice.exe电源管理驱动框架z电源管理驱动提供了给应用程序和设备驱动程序的APIz PM.DLL 通过自定义接口和DEVICE.EXE联接z用IOCTL来调用驱动程序电源管理APIz应用程序接口类API¾应用程序可以调用此类API改变系统电源状态,或设定对设备电源状态的需求z设备驱动程序接口类API¾设备驱动程序调用此类API来管理设备电源状态z消息通知(Notification)接口类API¾应用程序调用此类接口API来接收到电源状态变化的消息通知.应用程序接口类APIz取得/设置系统电源状态¾GetSystemPowerState¾SetSystemPowerState¾POWER_STATE_XXX 标志¾可自定义的标志¾例子:¾WINCE500\PUBLIC\COMMON\OAK\DRIVERS\PM\TEST\SET¾WINCE500\PUBLIC\COMMON\OAK\DRIVERS\PM\TEST\GETz设置/取消对设备电源状态的要求¾SetPowerRequirement¾ReleasePowerRequirement¾例子:¾WINCE500\PUBLIC\COMMON\OAK\DRIVERS\PM\TEST\REQ¾媒体播放器运行时,对显示驱动和背光的需求.z取得/设置设备电源状态¾GetDevicePower¾SetDevicePower*¾例子:¾WINCE500\PUBLIC\COMMON\OAK\DRIVERS\PM\TEST\GETD¾WINCE500\PUBLIC\COMMON\OAK\DRIVERS\PM\TEST\SETD*调用此API会限制电源管理驱动程序更新设备电源状态. 参考帮助文档.设备驱动程序接口类APIz设备驱动程序调用电源管理驱动¾DevicePowerNotify¾RegisterPowerRelationship¾ReleasePowerRelationshipz电源管理驱动调用设备驱动程序¾DeviceIoControl¾IOCTL_POWER_CAPABILITIES¾IOCTL_POWER_SET¾IOCTL_POWER_QUERY¾IOCTL_POWER_GET¾IOCTL_REGISTER_POWER_RELATIONSHIP消息通知接口类APIz RequestPowerNotifications¾PBT_RESUME¾系统从挂起状态恢复时产生此消息.¾PBT_POWERSTATUSCHANGE¾系统在接上和断开外部电源时产生此消息.AC power¾PBT_TRANSITION¾当电源管理驱动改变系统电源状态时产生此消息.¾PBT_POWERINFOCHANGE¾电池状态改变时产生此消息.z StopPowerNotificationsz例子:¾WINCE500\PUBLIC\COMMON\OAK\DRIVERS\PM\TEST\MON ¾应用程序通过此API获知电源/电池状态,切换电池图标.电源管理驱动管理的设备驱动程序z设备类型: 注册表项IClass-GUID¾[HKEY_LOCAL_MACHINE\SYSTEM\CurrentContro lSet\Control\Power\Interfaces]¾Generic power-manageable devices¾Power-manageable block devices¾Power-manageable NDIS miniports¾Power-manageable display¾例子:¾WINCE500\PUBLIC\COMMON\OAK\DRIVERS\PM\TEST\DEVSAMPLE¾AdverstiseInterface¾显示驱动程序调用此函数注册为Power-manageabledisplay 类型的驱动.内容z电源管理概要¾电源管理驱动程序的实现z内核级电源管理WINCE里的电源管理驱动程序z最少功能电源管理驱动程序(PMSTUBS)¾SYSGEN_PMSTUBS¾不支持电源管理APIz完全功能电源管理驱动程序¾SYSGEN_PM¾支持电源管理API¾WINCE提供了2个实例¾WINCE500\PUBLIC\COMMON\OAK\DRIVERS\PM\PDD\PDA¾WINCE500\PUBLIC\COMMON\OAK\DRIVERS\PM\PDD\DEFAULT电源管理驱动分层架构z MDD¾包含各类设备驱动的句柄¾管理设备的电源状态¾提供电源管理API的实现z PDD¾制定/维护系统电源状态机管理¾改变硬件电源状态z实现电源管理APIz跟踪和设置设备电源状态z跟踪应用程序的消息通知请求.z处理活动监视计数器z处理设备加载/卸载的通知,并维护设备驱动程序的句柄z处理父设备与子设备之间的电源关系z管理设备电源状态需求z实现与设备驱动程序的调用接口¾gStreamInterface. RequestStreamDeviceÆDeviceIoControl ¾gDisplayInterface. RequestDisplayDeviceÆExtEscapez自定义系统电源状态机z检查系统电源管理的注册表内容的一致性.z实现电源管理驱动的消息处理,实现状态机管理.z设置系统电源状态和相应设备进入对应的电源状态.z自定义状态¾On , UserIdle,SystemIdle,DeepIdle,Suspend,OnBattery, InCradle等状态.¾对应的POWER_STATE_XXX 标志¾系统电源状态到设备电源状态的映射z注册表设置[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ Power\State\On]Default=dword:0; D0Flags=dword:10000; POWER_STATE_ONCOM1:=dword1; D1D4Off (Off)D3Sleep (Suspend)D2Stand By (SystemIdle)D1Low on (UserIdle) D0Full on (On)系统电源状态到设备电源状态的映射z映射到所有默认的设备[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Pow er\State\SystemIdle]"Default"=dword:2; D2"Flags"=dword:100000; POWER_STATE_IDLEz映射到某一特定类型的设备[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Pow er\State\SystemIdle\{EB91C7C9-8BF6-4a2d-9AB8-69724EED97D1}] "Default"=dword:4 ; D4¾"{EB91C7C9-8BF6-4a2d-9AB8-69724EED97D1}“= "Power-manageable display“系统电源管理状态机z GWES监视用户操作,通过事件(Event)来通知电源管理驱动程序z电源管理驱动程序通过事件(Event)和超时机制来实现状态机用户活动计时器z为每个状态创建相应的事件(Event)¾3个事件¾A timer reset event.¾An active status manual-reset event.¾A manual-reset event¾[HKEY_LOCAL_MACHINE\SYSTEM\CurrentContro lSet\Control\Power\ActivityTimers\UserActivity]¾Active->Inactive->timeout 然后切换到下一个电源状态电源状态变迁依靠超时机制z[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlS et\Control\Power\Timeouts]"ACUserIdle"=dword:1e"ACSystemIdle"=dword:3c"ACDeepIdle"=dword:5a"BattUserIdle"=dword:1e"BattSystemIdle"=dword:3c"BattDeepIdle"=dword:5a"BatteryPoll"=dword:1f4z按秒计数z0 表示功能禁止, 系统不会自动切换到此状态z这些设置可以在”控制面板”里的电源管理里改变.系统电源状态变迁UserActiveUserIdleUserInactiveSystemIdleSystemActiveOnSystemInactiveSuspendTimeoutSystemInactivityUserInactivityTimeoutTimeoutSystemIdleSuspendUserActivityUser Interactive(PM State)(System State)(Event)电源管理状态切换timeoutPlatformUpdateSystemPowerStatePmSetSystemPowerState_IPlatformSetSystemPowerStateGenerateNotifications PowerOffSystemUpdateAllDeviceStatePmSetSystemPowerStateSetSystemPowerStateIf NewState(Internal call)(内部调用)(外部调用)If External callPlatformMapPowerStateHint(MDD)(PDD)内容z电源管理概要z电源管理驱动的实现¾内核级电源管理内核级电源管理¾OEMIdle¾当系统里没有线程要运行时被调用¾OEMPowerOff¾当系统要进入睡眠或关闭状态时被调用¾睡眠——唤醒的流程OEMIdlez当线程调度器里,没有线程需要运行时,调用此函数. (Blocked waiting for input or event.)z负责将CPU置于低功耗状态,并且能快速恢复到正常运行状态.z不能将内存(DRAM)置于自刷新状态OEMPowerOffz进入睡眠时,此函数负责将系统置于一个功耗最低的状态:¾保存系统设置¾将内存(DRAM)置于自刷新状态¾CPU停止工作(掉电)¾禁止中断处理(用于唤醒系统的中断除外)z退出睡眠状态时,此函数负责恢复系统的设置z睡眠¾调用SetSystemPowerState进入睡眠状态¾电源管理驱动里设置设备的电源状态¾调用PowerOffSystem()进入内核处理¾调用各设备驱动的XXX_PowerDown()¾调用OEMPowerOff()¾进入睡眠Zzzzz….z唤醒¾触发唤醒中断, CPU被唤醒¾开始执行Bootloader代码,判断冷启动还是唤醒¾判断为从睡眠中唤醒,用保存在内存上的地址跳回OEMPowerOff()里的唤醒位置,恢复系统设置¾调用各设备驱动的XXX_PowerUp()¾回到电源管理驱动中,更新各设备驱动的电源状态¾电源管理驱动发出系统状态变迁的消息通知¾整个系统恢复到正常运行状态PowerOffSystem的流程z SC_PowerOffSystem()¾WINCE500\PRIVATE\WINCEOS\COREOS\NK\KERNEL\kwin32.c内容z电源管理概要z电源管理驱动程序的实现z内核级电源管理移动与嵌入式开发者大会(MEDC)汲取新知,加速未来——移动与嵌入式开发者大会(MEDC)您想洞悉最前沿的微软移动与嵌入式技术吗?您想聆听最权威的技术专家现场讲授吗?您想全方位体验移动新产品所带来的无穷魅力吗?2006微软移动与嵌入式开发者大会将带领您与科技同步、与市场同行。
基于Windows CE.NET的设备驱动程序开发
发工具, 并以华恒科技 的HHAR 一E U 开发 板的触摸 屏驱动程序 ,] n o E NE M9 D  ̄Wid ws . T环境 下开发 具体驱动程序作 了解释。 ' C
关■ 词 : id w C . T 驱 动程 序 ;lt r B i e W n o E NE Paf m ul r o d 中田分类号: 367 TP 1 . 文献标识码 : A
统 发 行 时 , 些 驱 动程 序 就 要 被 修 改 。 这
操作 系统 , 并且支持多种处理器产品 , 包括x 6XsaeAR 8 、 cl、 M、
MI S等 系列 , 可 自 己开 发 相 关 硬 件 的 B P包 , 许 开 发 人 P 也 S 允
员选择合适硬件 。笔者使用基于 AR 核 心的开发板进行触 M9 摸屏驱动程序 的开发 , 并且使用微软 的 Pafr B i e lt m ul r开发 o d
维普资讯
MIrcmp t p l ain o.2 N . 。0 6 co o ue A pi t sV 12 , o 3 20 r c o
技 术交流
微 型 电脑应 用
20 0 6年第 2 2卷第 3期
文 章 编 号 :07 77 20 )3 O 8 O 1 0 — 5 X(0 6 0 一O 4 一 3
1 什么 是设备 驱动 程序
在开 始编写驱动程序 之前 , 您应该 了解设 备驱 动程 序 的 用途 。 驱动程序将基础硬件从 操作系统 中抽 象出来 , 使之更好 地面对应用程序开发人员 。这里所说 的设备 是一些物理和逻 辑实体 , 包括控 制、 资源管理等等 设备驱 动程序是管理虚拟 或者物理设备 、 协议 、 服务操作 的软件模 块 。 它存在 于任何一 个基 于Mi oot n o E平台的系统中 。 用程序 开发 c sf Wid ws r C 应 人员无需知道显示硬件或 串行硬件 的详细信息 。 例如 。 串行 设 备 是用通 用异步接收/ 送装置 ( 发 UAR T)实现 的还是用现 场
Microsoft Windows CE 的内存使用
Microsoft Windows CE 的内存使用John Murray1997.9介绍Microsoft®Windows® CE是组件化的操作系统,它可根据目标设备或平台的不同特点进行定制。
原始设备制造商(OEM)或嵌入系统开发者可以选择所需的系统模块和组件,将其提供给用于目标平台的操作系统。
所选择的模块和组件确定了它的内存需求情况。
一个模块表示一个完整的功能区域,在系统软件中可将其表示出也可以不将其表示出。
如果不需要该功能,那么可以将整个模块忽略。
例如,用一个名为“serial”的简单的模块提供出所有串行端口的功能,可以将其包括在系统中也可以不包括。
一些大的模块可以进一步分成几个组件。
这使得OEM厂商可以通过仅仅包含OEM设备的需要的组件,定制出这些模块更小的版本。
例如,文件系统模块包括RAM文件系统、ROM文件系统、注册表和数据库几个组件。
OEM可以(按照一定的限制)组合这些文件系统的组件使之满足目标系统的需要。
为了帮助OEM和嵌入系统开发者做决定,这对于了解给定模块或组件的内存耗费情况是十分有用的。
本文将讲述Windows CE 2.0操作系统是如何使用内存的,并列出对于所选的Windows CE系统配置中主要系统模块和组件的内存需求情况。
同时也将讲述如何使用Windows CE工具查看其他配置情况下的内存需求情况。
对于Windows CE 2.0版,微软已经创建并测试了这些模块和组件的几种基本配置。
这些配置代表了不同的几组系统性能,从仅带有最小用户输入并且没有显示能力的基本系统,到用于手持PC(H/PC)上的具有Microsoft Windows全部外观和感觉的完整系统。
每个配置都是建立在前一个配置的基础上的。
下列表格列出了在本文中被讨论到的被测试过的配置。
系统内存的使用典型的Windows CE设备包括ROM和RAM内存。
当设备被关闭时,设备也可以通过使用充电的后备电池而继续维持RAM中的内容。
第6章.第3节 WindowsCE操作系统开发
先 看一个 平台的创建流程
Platform Setting
使你可以浏览和修改关于整个平台的每个属性的选项 菜单: Platform -> Settings…
Build Options (1)
Enable CE Target Control Support
选择该选项可以在启动时使能目标控制功能(target control support). 选择这一项同时也打开了内核无关传输层(Kernel Independent Transport Layer — KITL). 选择该选项可以在Config.bib文件中预留内存空间,允许在启动过 程中操作系统可以读取boot loader存储的数据. 选择该选项可以开启事件跟踪子系统(event-tracking subsystem). 选择该选项可使线程运行在内核模式,选择该模式会使系统较脆弱, 但是性能会有所提高. 选择该选项可以使编译好的镜像下载后被烧写的到Flash中
允许调试器建立宿主机和目标机间的链接和传送调试信息 要建立宿主机和目标机间的通讯就必须选择该选项,取消该项也 会同时取消被选定的“Enable CE Target Control Support ”选 项 选择该选项可以将Windows CE的有关内核的信息以日志的形式 装入平台镜像中 这是一个有条件编译的标志,设置它表示OS会提供详细的调试信 息来帮助调试. 选择该选项将事件放入release目录,同时开启事件跟踪
PB能做什么?(2)
Windows CE测试套件(Test Kit)提供了整套驱动 测试工具 内核调试器可以调试定制的OS镜像,同时提供给 用户镜像运行状况的信息 应用调试器可以调试在特定OS上运行的应用程序 远程工具可以调试基于Windows CE的目标机上 运行任务,并获取相关信息 模拟器通过模拟硬件可以加快和简化开发过程, 使用户可以在宿主机上完成平台和应用程序的初 步开发 SDK导出向导可以为用户导出一个特定的软件支 持包(software development kit — SDK).
CE开发平台简介
开发平台(Platform Builder和Embedded Visual C++)简介1 Platform Builder介绍Platform Builder是微软公司提供给Windows CE开发人员进行基于Windows CE平台下嵌入式操作系统定制的集成开发环境。
它提供了所有进行设计、创建、编译、测试和调试Windows CE操作系统平台的工具。
它运行在桌面Windows下,开发人员可以通过交互式的环境来设计和定制内核、选择系统特性,然后进行编译和调试。
同时,开发人员还可以利用Platform Builder来进行驱动程序开发和应用程序项目的开发等等。
Platform Builder的强大功能,已使其成为Windows CE平台下嵌入式操作系统开发和定制的必备工具。
以下是Platform Builder提供的工具集。
使用模版来创建一个新的平台。
使用模版来创建一个新的板级支持包。
在Catalog列表中显示了一系列的系统特性,这些特性可以被选择用于新的平台中。
自动检查各个功能模块之间的依赖关系,以确保系统所需要的功能及其子功能,关联的模块都能被包含的定制的目录中。
通过输出的模板,将一个系统的功能输出到配置文件,以便其他用户使用。
提供基本的默认配置,这为定制具有特定功能的操作系统带来了方便。
Windows CE Test Kit提供了测试驱动的一系列工具。
内核调试器能调试被定制的操作系统,并且能给用户提供性能上的测试参数。
应用程序调试器能在目标机或者虚拟机的操作系统中测试应用程序。
远程调试器能通过远程控制来搜集目标机上的信息,比如远程文件监视器、注册表监视器。
虚拟器可以在硬件平台未搭建好的时候能调试硬件无关的程序。
SDK输出模板可以将特定系统的SDK导出,这可以是应用程序开发人员使用EVC 就可以为特定的系统开发软件。
EVC调试的是应用程序软件,而Platform Builder往往要编译整个内核再调试,两者的开发效率是不同的。
电脑光驱驱动更新方法
电脑光驱驱动更新方法对于使用电脑的用户来说,光驱是一个非常实用且重要的硬件设备。
然而,有时候光驱可能会出现一些问题,例如读取光盘速度变慢或者无法读取光盘等。
这些问题很可能是由于光驱驱动过期或损坏所致。
本文将为大家介绍一些电脑光驱的驱动更新方法,以帮助解决这些问题。
一、检查当前驱动版本在更新光驱驱动之前,首先需要确认当前电脑所使用的光驱驱动版本。
这可以通过以下步骤完成:1. 打开"设备管理器"。
在Windows系统中,你可以通过右键点击"我的电脑",然后选择"管理",再点击"设备管理器"来进入设备管理器界面。
2. 在设备管理器界面中,找到并展开"光盘驱动器"类别。
3. 右键点击光驱驱动器的名称,选择"属性"。
在属性窗口中,点击"驱动程序"选项卡。
这里你可以看到光驱驱动程序的详细信息,包括版本号等。
二、更新光驱驱动当确认了当前的光驱驱动版本后,接下来就可以进行光驱驱动的更新了。
以下是几种常见的更新方法:1. Windows自动更新最简便的更新方法是使用Windows自带的驱动更新功能。
步骤如下:1. 打开"设备管理器",找到光驱驱动器并右键点击。
2. 在弹出的菜单中选择"更新驱动程序",然后选择"自动搜索更新的驱动程序"。
3. Windows将自动连接到互联网,搜索并下载对应的最新光驱驱动。
完成后,按照提示安装新驱动程序。
2. 官方网站下载光驱的制造商通常会在官方网站上提供最新的驱动程序下载。
以下是下载的步骤:1. 打开浏览器,搜索光驱制造商的官方网站。
2. 在官方网站上查找支持页面或者驱动下载页面。
3. 根据光驱型号和操作系统,选择合适的最新驱动程序进行下载。
4. 下载完成后,运行安装程序,按照提示完成驱动的安装过程。
- 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总线等。 总线等 负责处理总线上硬件的询问, 负责处理总线上硬件的询问,以及资源的 分配。 分配。 同时也请求设备管理器为总线上的硬件安 装适当驱动程序。 装适当驱动程序。