0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

简述WinCE和Win2000/XP设备驱动开发的区别

电子工程师 来源:单片机与嵌入式系统 作者:单片机与嵌入式系 2021-04-05 10:05 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

引 言

Windows CE是一个32位、多任务、多线程的嵌入式操作系统,是微软专门为信息设备、移动应用、消费类电子产品、嵌入式应用等非PC领域设计的操作系统产品,在外观和使用的感觉上十分接近桌面Windows系统。它使用平面内存模式寻址,可以同时运行多个程序并支持一个程序中的多个线程,并且非常精炼,只有很小的内存要求。与基于PC的操作系统不同,Windows CE不需要标准硬件,反而支持各种各样的CPU(如X86、PowerPC、ARM、MIPS等),通过OEM适配层(OEM adaptation layer)可以把Windows CE适配到任何硬件平台。

Windows CE是微软Windows操作系统家族的一个成员,支持用于Windows 2000/XP和Windows 98等桌面Windows操作系统的Win32 API的一个子集。由于它不是桌面Windows操作系统的一部分或缩减版本,使得开发Windows CE的驱动程序与开发桌面Windows的驱动程序有所不同。本文将着重讨论这些区别,以使广大熟悉桌面Windows驱动程序开发的程序员能快速掌握嵌入式操作系统WindowsCE驱动程序的开发方法。

1 驱动结构模型比较

在桌面Windows系统,以支持Windows2000/XP的WDM驱动模型为例。WDM体系结构实行分层处理,即设备驱动被分成了若干层——最高层驱动程序、中间层驱动程序、最低层驱动程序,

在Windows CE驱动中,按驱动的结构可以分为两种类型——分层式设备驱动程序和整体式驱动程序,如图2所示。分层式设备驱动程序由上层和下层两部分代码组成。上层的程序叫做模型设备驱动程序(MDD),下层的程序则叫做平台相关的驱动程序(PDD)。整体式驱动程序的源代码由中断服务线程代码和针对平台的代码组成。

同桌面Windows设备驱动结构模型相比,Windows CE设备驱动相对简单一些。正如图1和图2所示,两种操作系统的设备驱动虽然存在许多相似的地方,都采用了模块、分层的设计方法,但是还存在许多不同的地方。在Windows CE操作系统中,分层的驱动程序并不适用于所用的驱动,尤其是将驱动程序分为两层将会导致在驱动程序操作时附加的功能调用,这无疑会降低驱动程序的效率。对于时间或性能关键的实时操作,整体式驱动程序将会更适合。

在桌面Windows系统中,驱动各层通信之间使用一种称为I/O请求包(IRP)的数据结构进行通信。影响到设备的每个操作都使用I/O请求包,采用层次结构可以使I/O请求过程更加明了。I/O管理器发送IRP来请求驱动程序的处理,通常IRP由分层的驱动程序栈来处理,高层的驱动程序把请求划分成更简单的请求并传递给下层驱动程序。IRP首先被送到设备堆栈的最上层驱动程序,然后逐渐过滤到下层的驱动程序。

每一层驱动程序都可以决定如何处理IRP。而Windows CE驱动各层之间的通信没有采用IRP通信机制,而是通过接口函数调用实现的。设备驱动程序接口(Device Driver Interface,DDI)是在MDD层中实现的函数集,系统中的GWES模块通过这个接口调用设备驱动程序;设备驱动程序服务器接口(Device Driver Service Provider Interface,DDSI)是在PDD层中实现的函数集并由MDD调用。

2 设备驱动组成部分比较

简单地说,驱动程序是一些例程的集合,它们被动地存在,等待主机系统软件来调用或激活它们。在Win-dows系统中驱动,具体的驱动程序有所不同,其包含的例程也不同,但其主要例程是相同的。

以下从几个方面阐述WindowsCE和桌面Windows设备驱动组成的不同。

2.1 驱动程序的入口点

在桌面Windows和Windows CE两个系统中的驱动程序都含有初始化模块,该模块主要功能是完成驱动程序的初始化及卸载。在桌面Windows系统的初始化模块中,包括每一个设备驱动程序都有的一个初始化入口点——DriverEntry例程,每次设备驱动程序启动时该例程被系统自动调用。其最重要的功能是设置驱动程序对应于I/O请求的主功能代码(MajorFunction)的回调例程。

其中,AddDevice例程是在系统添加一个设备时被PnP管理器调用的,其主要工作是创建并初始化设备对象;DriverUnload例程在系统卸载硬件时使用,由I/O管理器调用,释放所有资源。初始化模块中还包括Create和Close两个例程,这是Win32程序获得和释放设备句柄的唯一途径。

与桌面Windows设备驱动程序开发相比,WindowsCE设备驱动程序开发的主要难点是,对于不同类型设备的驱动程序架构是不一样的。以流接口驱动程序为例,Windows CE设备驱动程序是用户模式动态链接库(DLL),其入口点在不同的情况有一些细微的差别,主要入口点包括XXX_Init、XXX_Deinit、 XXX_Open、XXX_Close、XXX_IOControl、XXX_Read、XXX_Seek、XXX_PowerUp和 XXX_PowerDown,在实际开发中接口名称中的XXX三个字母由设备驱动的设备文件名前缀代替。

2.2 与应用程序的通信

设备驱动程序构造成功之后,将它与设备一同安装进系统,以便用户可以对设备进行适当的控制及访问。在桌面Windows和 Windows CE两个系统中使用Win32 API实现硬件的访问。首先调用CreateFile创建一个设备的连接,获得该设备的句柄(Handle),然后根据需要调用ReadFile、 WriteFile、DeviceIoControI等函数对设备进行读写或者其他I/O控制操作,最后调用CloseHandle关闭设备。

在桌面Windows系统中,当用户需要访问某设备时,必须首先取出指定设备全局唯一标识符(GUID)的设备信息集,枚举设备实例的接口数据,从中获得设备的符号链接名,然后调用CreatFile创建设备,并获得设备句柄,而在驱动程序内部通过处理IRP响应来自Win32应用程序对 IRP_MJ_CREATE、IRP_MJ_READ、IRP_MJ_WRITE和IRP_MJ_OCTL等请求。IRP由IRP首部结构和一系列的栈单元组成,每个栈单元是一个IO_STACK_LOCA-TION结构。

驱动程序仅需知道当前I/O栈单元和IRP首部结构中的信息就可以对IRP进行处理。驱动程序处理完IRP后,使用IoCompleteRequest函数通知I/O管理器,可以通过其参数设定状态码和返回的字节数。在Windows CE系统中,应用程序需要了解中断处理线程中数据的输入输出完成情况,以便及时地处理。这就需要建立应用程序和设备驱动程序的同步通信。

2.3 设备名

在Windows设备驱动中,为了提供Win32程序可用的名字,必须为每个设备创建符号链接。在桌面Windows和Windows CE两个系统中,都可以采用一个明确的符号链接名。一个具体设备名称是由设备名前缀和设备名索引组成的,即3个大写字母、1位数字和冒号组成。另外在桌面 Windows系统中,还可以采用设备接口为设备创建符号链接。每个设备接口由一个128位全局唯一标识符(GUID)标志。把设备注册为一个特定的设备接口就创建了一个符号链接。用户态设备可以取得拥有此GUID的设备。

2. 4 驱动程序的运行模式

在Windows系统中支持两种基本模式的驱动程序类型,即用户模式(user mode)和内核模式(kernel mode),不同的模式允许不同层次的内存存取和系统资源的分配。内核模式驱动程序则由运行于内核模式的系统级代码组成,它们没有系统资源存取的限制,可以执行任何有效的CPU指令,被用来直接控制硬件。用户模式驱动程序是按用户模式运行的系统级代码,它们不能使用直接的硬件I/O指令来访问硬件。

桌面Windows系统一般要求设备驱动运行在内核模式下。内核模式提供设备资源的直接访问,没有固定的用户模式的辅助操作。

Windows CE系统一般要求设备驱动运行在用户模式下。这种运行在用户模式下的设备驱动程序有许多优点,最明显的优点是当设备驱动开发有错误动作时,内核被有效地保护起来了,因此内核被驱动程序破坏,或者可能导致不能重新启动内核的潜在目标存储错误,以及其他意想不到的灾难等发生的可能性就明显地减少。

2.5 驱动程序的安装

桌面Windows的驱动安装通过INF文件。INF文件是一个文本文件,含有安装一个WDM驱动设备程序需要的所有必需的信息,包括要复制的文件列表、要创建的注册表项等。驱动根据INF文件中的指令安装,驱动程序可执行文件被复制到正确的位置,通常是Windows Sys-tem32\Drivers目录,然后创建各种注册表项。WindowsCE和桌面Windows之间的最大区别是,Windows CE不支持.sys和.inf文件。Windows CE设备驱动编译成动态库,将驱动的动态库文件直接拷入Windows\目录,然后创建各种注册表项即可。这就减少了Windows CE加载程序的复杂性和大小。

3 开发环境比较

在桌面Windows系统中,驱动程序的开发采用两种方式。一类是Microsoft公司提供的Windows DDK(De-vice Driver Kit),由于DDK基于汇编语言的编程方式和内核模式的调用,对没有深厚的OS原理和编程水平的人员来说,任务相当艰巨。另一类是NuMega公司提供的DriverStudio,它是一个大的开发工具包,包含VtoolsD、SoftICE和DriverWorks等开发工具。利用 DriverStudio开发WDM驱动程序,可以大大减轻开发人员的工作量、缩短开发周期,以及降低开发驱动程序的难度。

Windows CE开发平台的开发者、独立硬件供应商(IHVS)和应用程序开发者都会从事基于Windows CE平台的设备驱动程序开发。对于不同的开发者,微软为Windows CE提供了2种开发工具:Platform Builder和Embedded Visual Tools。Platform Builder是一个定制基于Windows CE操作系统的嵌入式平台的集成开发环境(IDE),为创建Windows CE嵌入式系统提供了全部相关工具,范围从用来开发基于Windows CE的应用程序和设备驱动程序,到用来创建操作系统各种自定义版本。

而Embedded Visual Tools主要用于上层应用程序、驱动的开发,功能类似于桌面Windows平台上的开发工具VC、VB等。这个工具的核心是Embedded Visual C++,它具有和Visual C++6.0基本相同的特性,包括对MFC、ATL以及COM/DCOM的支持、应用程序向导、编译调试等多种功能。

结 语

理解Windows CE与桌面Windows设备驱动程序开发的区别,有助于广大熟悉桌面Windows设备驱动程序开发的程序员快速掌握嵌入式操作系统Windows CE的设备驱动程序开发。近几年来,信息家电、掌上电脑、电视机顶盒等基于Windows CE操作系统的设备已变得越来越普及,而Windows CE上的设备驱动程序还比较少,因此Windows CE设备驱动程序具有不少潜力和市场。希望本文对打算开发Windows CE设备驱动程序的人们有所帮助。

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 驱动器
    +关注

    关注

    54

    文章

    9117

    浏览量

    156537
  • Win2000
    +关注

    关注

    0

    文章

    4

    浏览量

    8879
  • WinCE
    +关注

    关注

    3

    文章

    128

    浏览量

    50440
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    SPC56xP54x/SPC56xP60x系列MCU:汽车应用的理想之选

    SPC56xP54x/SPC56xP60x系列MCU:汽车应用的理想之选 在汽车电子领域,对高性能、可靠且功能丰富的微控制器(MCU)的需求日益增长。SPC56xP54x/SPC56xP
    的头像 发表于 04-16 11:30 239次阅读

    MPLAB ICE 2000:处理器模块与设备适配器深度解析

    MPLAB ICE 2000:处理器模块与设备适配器深度解析 在电子开发的领域中,调试工具的性能和适配性至关重要。MPLAB ICE 2000作为一款强大的调试工具,其处理器模块和
    的头像 发表于 04-07 14:55 171次阅读

    MPLAB® ICE 2000处理器模块与设备适配器技术详解

    MPLAB® ICE 2000处理器模块与设备适配器技术详解 在嵌入式开发领域,调试工具的性能和功能对项目的成功至关重要。MPLAB ICE 2000作为一款强大的调试工具,其处理器模
    的头像 发表于 04-07 14:45 255次阅读

    差动线驱动和集电极开路区别

    本质区别。 简单来说, 集电极开路 是一种结构简单、电平灵活的“开关”,但速度慢、距离短;而 差动线驱动 是一种抗干扰能力强、适合高速长距离传输的“平衡驱动”方案。 下面通过几个关键维度来对比它们的核心
    的头像 发表于 04-03 15:41 144次阅读
    差动线<b class='flag-5'>驱动</b>和集电极开路<b class='flag-5'>区别</b>

    LUMISSIL T40XP智能视频应用处理器芯片详解,这样助力视频设备升级!

    LUMISSIL T40XP智能视频应用处理器芯片详解,这样助力视频设备升级! 在当今数字化时代,视频设备如移动相机、安防监控系统等的需求日益增长,对处理器的性能和功能也提出了更高的要求
    的头像 发表于 03-30 16:05 124次阅读

    VNI8200XP / VNI8200XP - 32:八通道高端智能功率固态继电器的深度解析

    VNI8200XP / VNI8200XP - 32:八通道高端智能功率固态继电器的深度解析 在工业控制和自动化领域,对于高性能、高可靠性的功率驱动器件需求日益增长。VNI8200XP
    的头像 发表于 01-28 14:20 428次阅读

    【「Linux 设备驱动开发(第 2 版)」阅读体验】Linux内核开发基础

    感谢电子发烧友论坛提供的《Linux设备驱动开发(第2版)》阅读机会,测评将从Linux内核开发基础、Linux内核平台抽象和设备
    发表于 01-12 22:45

    DLPA2000电源管理和LED/灯驱动器IC:设计与应用详解

    DLPA2000电源管理和LED/灯驱动器IC:设计与应用详解 在电子设备不断追求高性能、小型化和低功耗的今天,电源管理和LED驱动技术显得尤为关键。DLPA
    的头像 发表于 12-15 11:20 2795次阅读

    【免费送书】成为硬核Linux开发者:《Linux 设备驱动开发(第 2 版)》

    Linux系统的设备驱动开发,一直给人门槛较高的印象,主要因内核机制抽象、需深度理解硬件原理、开发调试难度大所致。2021年,一本讲解驱动
    的头像 发表于 11-18 08:06 1850次阅读
    【免费送书】成为硬核Linux<b class='flag-5'>开发</b>者:《Linux <b class='flag-5'>设备</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>(第 2 版)》

    【书籍评测活动NO.67】成为硬核Linux开发者:《Linux 设备驱动开发(第 2 版)》

    星期内提交不少于2篇试读报告要求300字以上图文并茂。4、试读报告发表在电子发烧友论坛>>社区活动专版标题名称必须包含 【「Linux 设备驱动开发(第 2 版)」阅读
    发表于 11-17 17:52

    2000-3000 MHz 低噪声功率放大器驱动器 skyworksinc

    电子发烧友网为你提供()2000-3000 MHz 低噪声功率放大器驱动器相关产品参数、数据手册,更有2000-3000 MHz 低噪声功率放大器驱动器的引脚图、接线图、封装手册、中文
    发表于 09-03 18:32
    <b class='flag-5'>2000</b>-3000 MHz 低噪声功率放大器<b class='flag-5'>驱动</b>器 skyworksinc

    舵机原理简述!

    舵机原理简述 舵机是一种高精度的位置伺服执行机构,广泛应用于机器人关节、无人机舵面控制、航模操控等场景,其核心功能是通过接收控制信号,精确驱动输出轴旋转到指定角度并保持稳定。以下从结构组成、控制
    的头像 发表于 08-22 10:57 2322次阅读

    win7无法识别USB设备怎么解决?

    我现在有一个添加了CDC的FX3固件,该设备可以在win10和win11上正常工作,但在win7似乎并不能正确的识别设备,串口和USB
    发表于 07-16 06:52

    【Milk-V Duo S 开发板免费体验】Duo S(SG2000)初步使用

    通过开关在 RISC-V 和 ARM 启动之间切换。 通过性能和接口的增强,DuoS 更适合各种场景和更复杂的项目开发需求。 1 SG2000 简介 SG2000 是面向边缘智能监控 IP 摄像机
    发表于 07-10 00:27

    怎样安装cy7c68013的虚拟串口win10驱动

    怎样安装cy7c68013的虚拟串口win10驱动?How to install cy7c68103\'s virtual UART win10 driver to make the chip
    发表于 06-04 06:33