Windows CE6.0的DM9000A流接口驱动开发
摘要:针对WindowsCE系统下专用网络驱动接口开发难度大的情况,本文介绍一种基于WindowsCE流接口驱动的工作机制及开发方法。相比于WindowsCE对各种硬件设备所提供的专用接口,流接口驱动具有更大的灵活性,且能够实现应用层到底层硬件的控制。以含有ARM11内核的S3C6410结合以太网通信芯片DM9000A为例,逐步分析流接口驱动程序的开发流程,并利用PC机抓取以太网通信数据,验证了流接口驱动程序开发的正确性。
本文引用地址://m.amcfsurvey.com/article/202323.htm关键词:Windows CE 6.0;S3C6410;DM9000A;流接口驱动
引言
嵌入式技术在各个领域的应用与日俱增,基于微软公司研发的Windows CE嵌入式操作系统的电子设备更是渗透到各行各业。随着网络技术的发展,以太网几乎成为了电子通信设备首选的通信方式。Windows CE 6.0提供的网络接口驱动器标准(NIDS)固然得到系统的良好支持,但其驱动程序的实现较为复杂,且通过NIDS实现应用程序对网络底层驱动的操作难度较大。
针对WindowsCE6.0系统下应用程序对设备硬件难以灵活控制的问题,本文介绍一种使用流接口驱动实现应用程序对硬件进行控制的方法。考虑到WindowsCE6.0在内核访问机制上有别于以往版本,且以太网接口的广泛使用及其基于NIDS的开发难度较大,故而以DM9000A网络芯片的驱动及控制为例进行介绍。
1 Windows CE 6.0的设备驱动机制
Windows CE所有的驱动程序都是以DLL文件的形式存在的,系统在执行驱动程序代码之前必须先将相应的DLL文件加载到地址空间。Wind owsCE 6.0提供3个系统进程来加载和执行驱动程序的DLL文件,它们分别是Device.exe、GWES.exe和FileSys.exe。它们各自加载的驱动类型如图1所示。
2 流接口驱动工作原理
2.1 流接口驱动架构
应用程序根据加载的流驱动的名称和操作码调用文件API,文件API被系统转发到FileSys.exe进程中;FileSys.exe一旦发现转发过来的文件API是对设备的操作,则会交给设备管理器进行处理;设备管理器将根据具体的请求,调用相应的流驱动接口程序。对于Windows CE系统应用层而言,使用流接口驱动的硬件设备被抽象为一个具有固定接口函数的动态链接库(DLL)。应用程序调用文件API函数与流接口驱动程序进行通信,把对硬件的操作转化为对文件的读写控制,从而达到应用程序操作硬件的目的。流接口驱动程序的体系结构如图2所示。
2.2 流驱动接口函数
流接口驱动程序具有统一的接口函数,只需根据硬件没备的操作时序在相应的接口函数里编写控制指令。Windows CE系统下流接口函数功能描述如表1所列。
表1中XXX代表驱动文件的名称,Windows CE中流接口驱动的文件名称规定为3个大写的字母/数字。在进行流接口驱动程序编程时,并非所有的接口函数都要编写,一般比较重要的是XXX_Init()和XXX_IOControl()两个函数。前者在设备驱动被加载时调用,主要编写初始化硬件设备的相应控制指令,其中包括很是关键的地址映射操作;后者则主要实现对硬件设备的各种控制,可以实现数据的读写等操作,对设备的所有控制都可以在这个接口函数下实现,只需分配好相应的控制码。对于本文介绍的DM9000A,DM9_Init()实现虚拟地址的获取及初始化操作,DM9_IOControl()则实现数据的发送与接收,其中发送控制码定义为DM9_SendData,接收控制码为DM9_ReceiveData。
评论