1 / 62

CE 驱动程序

CE 驱动程序. 所有驱动皆为动态链接库 驱动实现中可以调用所有标准的 API CE 驱动程序模型 本机驱动程序 流接口驱动程序. 本机驱动程序. 用于低级、内置设备 提供一组定制的接口 可通过移植、定制微软提供的驱动样例来实现 源码网整理: www.codepub.com. 流接口驱动程序. 基本的设备驱动类型 实现一组固定的流接口函数 所有的 CE 设备皆可使用此模型实现. GWES 加载驱动. Keyboard Mouse Touch Screen Display Battery Notification LED. 设备管理器加载的驱动.

zoltan
Download Presentation

CE 驱动程序

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CE驱动程序 • 所有驱动皆为动态链接库 • 驱动实现中可以调用所有标准的API • CE驱动程序模型 • 本机驱动程序 • 流接口驱动程序

  2. 本机驱动程序 • 用于低级、内置设备 • 提供一组定制的接口 • 可通过移植、定制微软提供的驱动样例来实现 • 源码网整理:www.codepub.com

  3. 流接口驱动程序 • 基本的设备驱动类型 • 实现一组固定的流接口函数 • 所有的CE设备皆可使用此模型实现

  4. GWES加载驱动 • Keyboard Mouse • Touch Screen • Display • Battery • Notification LED

  5. 设备管理器加载的驱动 • 本地驱动:PCMCIA Host Controller USB Host Controller driver NDIS.DLL • 流接口驱动:Audio driver Serial port driver Parallel port driver Port Monitor

  6. 需要时加载驱动 • PC Card Client drivers • USB Client drivers • NDIS Miniport drivers

  7. 中断处理 • 内核模式的中断服务例程(ISR) • 短小的汇编语言代码 • 返回中断号给内核 • 用户模式的中断服务线程(ISP) • 接收中断通知,并进行中断的处理

  8. Registering an Interrupt Handler • After a device driver is loaded, the driver creates an IST and registers it with the interrupt handler • IST is registered for one or more logical interrupts.(InterruptInitialize) • Microsoft’s the MDD layer registers the driver for interrupts

  9. Deregistering an Interrupt Handler • 调用 InterruptDisable来删除IST和逻辑中断的连接 • 调用 OEMInterruptDisable关闭中断

  10. Processing an Interrupt • 中断发生时.内核跳至异常处理程序 • 异常处理程序使所有中断无效.然后调用合适的中断服务例行程序准备物理中断经 • 中断服务例行程序以中断标识符的形式返回逻辑中断。 • 中断处理程序重新启动除当前中断以外的所有中断,并把信号传递给适当的中断服务线程。 • 中断服务线程调用依赖平台的驱动程序来访问硬件和完成逻辑中断的处理。 • 中断服务线程调用InterruntDone函数。 • 中断处理程序重新启动当前中断.并在OAL中调用OEMIntemptDone函数。

  11. 中断处理

  12. 本机驱动程序 • 单片驱动程序 直接将硬件设备的功能传递给操作系统 • 分层驱动程序 模型设备驱动程序(MDD) 依赖平台的设备驱动程序(PDD)

  13. 嵌套的中断 • 256个优先级,0最高,以前的8个优先级映射为248-255 • 高优先级的ISR和IST可以中断低优先级的ISR和IST • 四个范围 • 0-96:高优先级实时任务 • 97-152:缺省的CE驱动 • 153-247:比普通的用户级任务高的任务 • 248-255:非实时的用户应用

  14. 驱动程序的安装 • 连接CE设备 • 把驱动DLL拷贝到\Windows目录】 • 设置注册表键值

  15. 本地驱动程序模型

  16. MDD执行任务 • 链接PDD层并定义它希望调用的函数 • 把不同的函数集提供给操作系统 • 处理像中断处理这样的复杂任务 • 与GWES模块和内核通信

  17. MDD特点 • 提供标准的设备驱动程序接口 • 一般不需改变

  18. PDD 不象MDD层.依赖平台的驱动程序(PDD)层与MDD和硬件都有接口,这就意味着 必须适合目标平台的需要。一个PDD由针对具体硬件的函数组成.而这些函数与一个MDD 相对应、但这种对应不是直接的—一对应。MDD函数实现独立的任务,而MDD则通过 使用这些任务来实现其目标。因为PDD是硬件相关的,因此必须生成一个设置好的PDD 并输出到平台硬件、微软为各种各样的内部设备提供了几个样本PDD层

  19. 本机驱动程序实例 • 保存位置 Platform\ODO\Drivers和 Platform\ODO\GWE • 例子 .样本电池驱动程序 .样本显示器驱动程序 .样本键盘驱动程序 .样本示警发光二极管驱动程序 .样本PC卡插槽驱动程序 .样本串行口驱动程序 .样本触摸屏驱动程序 .样本USB Host COntroller驱动程序

  20. 电池驱动程序例子 • 功能:提供一些关于平台电池的电力水平的信息。电池驱动程序报告主电池的状态并备份电池的状态。 • 是单片驱动程序 • DDI函数 BatteryDrvGetLevels BatteryDrvGetStatus BatteryDrvSupportChangeNotification

  21. 键盘驱动程例子 • 功能:把键盘输入转换为输入系统的键盘事件.然后驱动程序生成这些键盘事件的统一代码符。 • MDD层的源码在路径publlc\ommontoaktonvers • DDI函数: KeybdDriverGetInfo KeybdDriverSetMode KeybdDriverInitialize KeybdDriverVKeyToUnicode KeybdDriverInitStates KeybdEventCallback KeybdDriverPowerHandler • DDSI 函数: KeybdPdd_DllEntry KeybdPdd_GetEvent KeybdPdd_InitializeDriver KeybdPdd_PowerHandler

  22. 在样本模型设备驱动程序(MDD)中, 键盘驱动程序的中断服务线程IST的名字是KeybdDriverThread。这个线程调用函数Intenfljntlnltlallze注册SYSINTR_KEYBOARD中断,然后等待系统发出SYSINTR_KEYBOARD信号,在收到信号后中断处理程序调用函数KeybdPdd_GetEvent.把从设备依赖驱动程序(PDD)返回的键盘事件发送到输入系统。输入系统对它们进行排队以分发给相应的应用程序(源码网整理:www.codepub.com)

  23. 样本串行口驱动程 • 功能:串行D驱动程序处理和串行口工作类似的任何I/O设备,包括那些基于16450和16550 通用异步接收传送器(UART)芯片的设备和那些使用直接内存访问(DMA)的设各、许 多基于WndoWW CE的平台都有这种类型的设备,包括普通9针串行口、红外线I/O D和PC卡串行设备如调制解调器 • 位置:Public\Common\Oak\Driver\Serial

  24. DDI函数: COM _Close COM _ PowerDown COM _Deinit COM _ PowerUp COM_INIT COM _ Read COM _IOControl COM _Write COM _ Open • DDSI函数 GetSerialObjectHWGetModemStatusHWPutBytesHWClearBreakHWGetRxBufferSizeHWResetHWClearDTRHWGetRxStartHWSetBreakHWClearRTSHWGetStatusHWSetCommTimeoutsHWCloseHWInitHWSetDCBHWDeinitHWIoctlHWSetDTRHWDisableIRHWLineIntrHandlerHWSetRTSHWEnableIRHWOpenHWTxIntrHandlerHWGetBytesHWPowerOffHWXmitComCharHWGetCommPropertiesHWPowerOn HWGetIntrTypeHWPurgeComm

  25. 电源管理 • 为提供对可删除国行口硬件的连接事件的自动侦测 串行口驱动程序需对受检数据载体线(the Data Carrer Detected line)进行监视、对于可以自动侦测的串行口如基于pC卡的串行口硬件,驱动程序使用函数 CeEventHasoccured查看 NOTIFCATION EVENT RS232 DETECTED消息

  26. 流接口驱动程序 • 流接口驱动程序是动态连接库.由一个叫做设备管理程序的特殊应用程序加载、管理和卸载、与具有单独目的接口的内部设备驱动程序相比.所有流接口驱动程序使用同一个接口并调用同一个函数集——流接口函数 • 流接D驱动程序的主要任务是把外设的使用传递给应用程序,这是通过把设备表示为文件系统的一个特殊文件实现

  27. 流接口驱动程序模型

  28. PC Card 客户端设备流程图

  29. 流接口驱动程序接收来自设备管理程序和应用程序的命令,并把这些命令转换成他控制的设备的适当控制信息。流接口驱动程序接收来自设备管理程序和应用程序的命令,并把这些命令转换成他控制的设备的适当控制信息。 • 用户应用程序:包括任何访问外部设备的应用程序,对外部设备的访问是通过文件系统和连接外围设备的特殊文件完成的。 • 设备管理程序: 设备管理程序是一个用于加载和卸载流接口驱动程序的特殊应用程序。 • 外围设备:由设备驱动程序管理的设备。

  30. 设备管理程序 用户层程序,非内核,与内核、注册表、流接口驱动程序DLL关系密切。 • 在系统启动时或收到用户在基于WindowS CE的中自上增加了外围设备的信息时, 初始化驱动程序的加载、例如 在用户插入一个PC卡时.设备管理程序就试图寻 找这PCi并为之加载设备驱动程序。 • 向内核注册特定文件名,该文件名把应用程序使用的流接口函数映射到流接口驱 动程序的那些函数的实现。 • 通过从外围设备获得即插即用标识符或激活一个检查子程序来发现可以处理该设 备的驱动程序为外围设备找到合适的设备驱动程序。 • 通过读写注册值加载和跟踪驱动程序。 • 当不再敲要设备时 卸我其驱动程序、例如.在用户去掉PC卡后 设备管理程序 就卸载PC卡设备的驱动程序。

  31. 设备管理程序使用的注册键 • 位置:HKEY_LOCAL_MACHINE\Drivers • 子键: Active\ :包含由设备管理程序加载的跟踪当前活动驱动程序的子键、设备驱动程序设置子 程序不应修改Active\键的内容.也不应依赖于Active\键中任何特殊值的存在。 PCMCIA\:含有与PC卡及其流接口驱动程序有关的子键。这个子链中最重要的信息是PC卡的即插即用标识符.它是和特殊的驱动程序相对应的. Detect\子键包含已编号的条目项 这些项是DLL名和侦测函数的列表、这些函数为即插即用标识符的PC卡或为未知即插即用标识符的PC卡识别一个通用流接回驱动程序。 Driver: 在通用PC卡驱动程序之后命名的Driver子键含有用于加载驱动程序的值.当通用流接口驱动程序侦测函数指示它可以驱动一个特殊设备时.设备管理程序就生成单独的Driver子键。Driver子键的存在说明由驱动程序完成的侦测的存在,该侦测在PCMCIA\dete。的键中有一个条目项。 Plug_and_Play ID:子键含有用于加载PC卡流接口驱动程序的值.典型地.PC卡驱动程序的设置子程序在基于Wndows CE平台上安装驱动程序时就生成了这些子键.

  32. 加载流接口驱动程 • 在启动时进行。在基于WINDOWS CE的平台启动时,就启动设备管理程序。设备管理程序读取 HKEY_LOCAL_MACHINE\Drivers\BUILTIN键的内容并加载已列出的流接口驱动程序、例如.在许多基于WINDOWS CE的平台上,设备管理程序通过这个机制加载内部串行口(Serialdll)的驱动程序 • 在设备管理程序自动检测外围设备与基于 Wndows CE平台的连接时进行的. • 设备管理程序不能识别设备时,应用程序自己加载: 启动应用程序, 检测驱动是否加载, 调用RegisterDevice函数来加载驱动并锁入内存 应用程序进行正常操作.

  33. 卸载流接口驱动 • 设备管理程序卸载 • 用户程序自行卸载: DeRegisterDevice函数从文件系统卸载设备文件,通知FreeLibrary函数卸载DLL

  34. 流接口驱动程序入口点 XXX_CloseXXX_DeinitXXX_InitXXX_IOControlXXX_Open XXX_PowerDownXXX_PowerUp XXX_ReadXXX_Seek XX_Write

  35. 单访问和多访问 多个应用可以同时访问驱动 多访问对XXX_Open的调用返回不同的hOpenContext值.单访问返回相同值.以后的调用使用这个值.

  36. 串行设备驱动设计 • 创建一个流接口驱动程序 • 在应用程序中直接对串口读写,并处理数据

  37. 串行设备驱动的考虑因素 • 单点或多点访问:若要支持多个应用的同时访问,使用流接口实现,简化用户级程序设计; • 数据流的复杂性:复杂的处理需要相当的处理。最好使用流接口方式。 • 数据速率:高速的数据处理,可能流接口驱动没有足够的处理时间,可能使用用户程序处理比较好。

  38. 安装流接口驱动程序 • 安装程序必须执行下列步骤: 1. 与基于Windows CE的平合连接.或检测连接已存在。 2.把流接口驱动程序DLL拷贝到平台的\WINDOWS目录下。 3.如果需要的话 为驱动程序建立注册键和注册值

  39. 流接口驱动程序例子 Pager Card Illustrates a device driver for the Motorola NewsCard pager Modem Card Illustrates a device driver for a PC Card modem RAM Card Illustrates a device driver for a Static RAM PC Card PC Card Test Illustrates a device driver for testing PC Cards Serial Illustrates a device driver for devices that connect to a serial port Touch Screen Illustrates a device driver that interacts with the screen

  40. NDIS网络驱动程序 • 提供一组抽象层,用于把网络驱动和协议栈或网络适配器相连.

  41. 网络驱动程序模型

  42. CE支持的NDIS功能 • NDIS4.0的一个子集 • 以太网和IrDA介质类型 • 标准的小端口卡驱动程序 • 中性小端口卡驱动程序的一个子集.] • Plug and Play loading of miniport drivers for PC Card–based NICs

  43. CE不支持的NDIS功能 • 单片或全功能的NDIS • 直接内存存取(DMA) • 连续的物理内存分配 • 既提供小端口给已有的协议栈,又提供协议接口给其它应用的中性小端口卡驱动程序 • 通过NDIS的广域网互联 • PC卡属性空间 • 多包传送

  44. Windows CE Miniport Driver • largely compatible with Windows NT • miniport driver for Windows CE is compiled as a dynamic-link library (DLL) that exports the DriverEntry function • DriverEntry typically performs any general or platform-specific initializations. It also registers the miniport driver with the NDIS system by calling the NdisMRegisterMiniport function. • CE does not support the Common Network .inf file format

  45. NDIS驱动的注册和初始化

  46. setup application or through the driver’s Install_Driver function must ensure that the proper registry keys are created • miniport driver should be installed in the \Windows directory • Miniport drivers for PC Card–based NICs can be loaded and unloaded dynamically • HKEY_LOCAL_MACHINE\Comm\Miniport\Group listed NDIS component loaded

  47. Implementing DMA for NDIS Miniport Drivers • DMA is important for efficient networking because it enables the layers in the networking architecture to share data without first copying that data • two categories of DMA: slave DMA and busmaster DMA

  48. Slave DMA • Slave DMA is appropriate for OEMs because it requires a block of memory that is pre-allocated in the device memory map of the Windows CE–based platform. Miniport drivers can map that block of physical memory to the driver’s virtual memory space, and then use the VirtualAlloc and VirtualCopy functions to move data in and out of that space

More Related