基于流式接口驱动的USB无线网卡①

2016-06-15 03:51潘泽锴覃贵礼罗云芳广西职业技术学院计算机与电子信息工程系南宁530226
计算机系统应用 2016年4期
关键词:嵌入式系统

潘泽锴,覃贵礼,罗云芳(广西职业技术学院 计算机与电子信息工程系,南宁 530226)



基于流式接口驱动的USB无线网卡①

潘泽锴,覃贵礼,罗云芳
(广西职业技术学院 计算机与电子信息工程系,南宁 530226)

摘 要:对比Windows CE系统驱动开发方式,提出以流式接口驱动模式的USB无线网卡的设计与开发,详细阐述了流式接口驱动的体系结构与实现流程,面向ARM11处理器的嵌入式平台以流式结构为框架实现USB无线网卡驱动开发,通过现场测试结果表明系统驱动实现方式切实可行,系统运行稳定、可靠,基本满足系统设计的目标要求.

关键词:流式接口; 嵌入式系统; USB; 无线网卡

1 引言

设备驱动程序时操作系统与硬件交互的方式,是连接硬件和操作系统的桥梁.它的功能主要是初始化并驱动内部和外围的硬件设备,或者为它们提供接口,以将操作系统和硬件设备连接起来,使其能够识别指定的设备并为相应的应用程序提供设备服务,与操作系统实现无缝连接[1].

Windows CE是微软推出功能强大、高效、可裁剪32位嵌入式开发系统,其运行机制与应用于普通PC机的操作系统类似,但是其驱动程序开发工具和开发方法存在较大区别.所以,一般熟悉Windows环境的程序员在Windows CE环境下进行程序开发时,往往难以很快适应[2,3].相对于同样是流行的Linux嵌入式系统,USB设备在逻辑上分为设备、配置、接口和端口4个层次,层次多势必造成开发和调试的难度增大,这就对初学者提出较高的要求; 而Windows CE平台流式接口驱动可以简化成模式设备和平台相关驱动两个层次,模式设备驱动相对固定,可以和别的驱动开发共用,对比两个开发模式,流式接口驱动开发相对简单易行[4].从硬件上考虑,相对其他开发模式,USB无线网卡流接口驱动开发的硬件可以要求硬件的复杂度较低,外围电路相对较少,硬件亦可以整体的方式给出,从而降低开发难度[5].

为此,本文就Windows CE 下的驱动工作原理与程序运行机制进行了分析,设计了一个以三星ARM11处理器S3C6410嵌入式平台为核心的USB无线网卡驱动系统,详细阐述平台流接口驱动设计以及USB无线网卡驱动的实现方法,其他类型更为复杂的接口程序亦可按此方式进行设计和开发[6].

2 Windows CE流接口驱动设计

2.1Windows CE驱动对比分析

在Windows CE系统中,驱动程序分为流接口驱动程序和本机设备驱动程序.本机设备驱动程序主要是和系统本身自带的设备相关,而流接口驱动程序则针对系统中所有外接的设备.而在本系统开发中,USB无线网卡作为一个系统外设加入整个系统,有鉴于此,采用流式接口驱动开发切实易行.

流接口驱动程序的主要任务是把对外设相应的操作传递给设备管理器应用程序,这是通过把设备表示成文件系统的一个特殊的文件来完成的.在此结构下,把所有的硬件设备都看成文件,和设备的交互其实就是读写文件,也就是数据流动.这样开发驱动不仅简单实用,并且用户也用一致的接口访问硬件,大大降低了开发的难度.与流驱动相反,本地驱动主要是人机界面相关的驱动,它们由GWES管理,在系统启动时加载.本地驱动由操作系统调用; 本地驱动提供给操作系统的不是标准的流接口,而是事先约定好的特定接口,不同的设备,接口也不一样,应用程序不能访问,对于这类驱动,驱动调试助手是无能为力的,对于开发者来说编译、下载、验证都较为困难.对比两者的特点,在进行USB无线网卡驱动开发中,选用流式接口驱动简单易行,同时增加驱动可移植性和可靠性.

2.2流接口驱动程序工作体系结构

流接口驱动程序表现为一个动态链接库,由设备管理器统一加载、管理和卸载,达到应用程序访问驱动程序、操作硬件的目的.流接口驱动程序通过编译后,生成DLL 文件,即动态链接库文件.操作系统可在运行时动态地加载需要的DLL文件,这样可以轻松实现外设的即插即用[1,7].

流接口驱动程序具有固定的入口点函数,它把设备抽象为文件进行操作,Windows CE 的文件系统通过这些入口点函数与流接口驱动进行通信,而应用程序则使用操作系统提供的文件API对外设进行访问.为此,设计流式驱动程序的体系结构如图1所示.

其中,应用层模块和流式就扣驱动模块由用户自己设计,文件管理模块FileSys.exe和设备管理器模块Device.exe模块由Windows CE操作系统提供,用户不能修改.

图1 流式驱动程序体系结构

首先,应用层接收到操作界面发来的执行命令,调用API文件向操作系统的文件管理器FileSys.exe加入进程,然后文件管理器模块把执行权交给设备管理器,由它根据具体的请求,调用不同流式接口函数与硬件之间进行交互,最终完成硬件的具体操作.在整个流接口驱动结构中,每个流接口驱动必须实现一组标准的函数,用来完成标准的文件I/O函数和电源管理函数,这些函数提供给Windows CE操作系统的内核使用.不管流接口驱动控制什么样的设备,它都向其它模块提供同样的流接口DLL函数,任何一个逻辑上可以看作数据源的设备都可以为其实现一个流接口驱动程序[7].

2.3流式接口驱动实现流程

流接口驱动程序是以动态链接库形式存在的,由设备管理器统一加载、管理和卸载,它接受来自设备管理器和应用程序(通过操作系统的文件系统)的命令.在这个过程中汇涉及很多实体,这里仅保留硬件、流式接口程序、系统注册表、设备管理器与应用程序五个实体管理模块.整体流式接口驱动工作原理流程图如图2所示.

由图可以清晰的看出流式驱动程序工作整个过程.在流程之初,设备管理器Device.exe从注册表DLL键值中获取所在DLL文件名加载驱动程序,调用LoadDriver()函数把DLL文件进程加载到虚拟内存空间中; 然后设备管理器调用程序中xxx_Init函数对硬件进行一些最基本初始化操作; 至此,流式接口驱动已成功被加载[1,7].

图2 流式驱动工作原理流程图

接下来是应用程序使用设备文件管理器FileSys.exe调用CreatFile()打开设备,使用xxx_Open函数对硬件进行一些额外初始化工作,使硬件进入工作状态,并且返回结果给设备管理器进行下一步操作.最后,文件管理器根据CreatFile()返回的句柄,通过Device.exe调用ReadFile()函数读取设备数据信息,调用xxx_Read函数与硬件交互,从硬件中读取操作信息.当应用程序不再使用该设备时,系统调用CloseHandl()将设备关闭,流式接口驱动程序的完整生命周期至此结束.

驱动本身会把这些接受到的命令转化为外部设备相应动作.此外,该系统设计的流式接口驱动程序时放在用户态而不是核心态来实现,也增强了系统稳定性,为驱动人员提供了便利.而在嵌入式系统中,以流驱动模式为策略的框架下USB无线网卡的设计与开发灵活并且简单易行,下面以USB无线网卡驱动实现方法说明流接口优点.

3 USB无线网卡流式接口驱动实现

流接口驱动程序调用设备管理器与系统内核或外围设备打交道,给操作系统和驱动程序带来很大灵活性.根据流式驱动工作原理,设计的USB无线网卡驱动程序是以支持S3C6410处理器的Windows CE驱动程序框架为基础,根据S3C6410处理器的USB接口单元以及USB无线网卡的特性和原理而设计的.与上述的流式程序体系结构相对应,整个系统的核心控制简化三个层面: 设备驱动层、实时操作系统、应用层[8].

3.1驱动整体构架设计

本系统的USB无线网卡驱动采用Windows CE的流接口驱动方式,系统驱动整体框架结构如图3所示.

图3 系统驱动整体框架结构图

设计的整个系统通过Windows CE内核操作系统进行控制,USB网卡驱动包括实现 USB总线协议栈调用三个入口函数和实现设备控制的流接口函数[9].USB无线网卡的驱动首先调用USBDeviceAttach()、USBInstallDriver()、USBUninstallDriver()这三个入口,再在内核总编译其他流接口函数,在内核系统中成功被编译USB.dll动态连接库的形式,通过设备管理器Device.exe识别枚举程序中以USB前缀的函数并加载,流接口函数可以实现电源控制、I/O管理、中断控制,应用程序通过文件系统API命令调用驱动程序流接口函数发送控制命令[10].

3.2系统驱动入口函数实现

在Windows CE下,USB设备驱动编写使用USBD提供的函数操作USB设备,以动态链接库DLL提供的入口点与USBD模块进行交互,函数调用流程如图4.

图4 USBD模块函数调用流程图

从USBD模块函数调用流程图可以看出,USBD模块函数调用过程主要由USBDeviceAttach()、USBInstallDriver()、USBUninstallDriver()三个函数串连起来,USB驱动传输通道基本配置也主要由三个基本函数完成[11].

(1)USBDeviceAttach()函数.当USB无线网卡连接到计算机上时,它是驱动程序的入口函数,USBD模块调用此函数,这个函数主要用于初始化无线网卡模块,取得无线网卡设备信息,配置无线网卡设备,并且申请必需的资源.它依次调用下面三个函数: RegisterClientDriverID、RegisterClientSetings、和GetSetKeyValue和完成注册表的配置.

(2)USBInstallDriver()函数.首先实现主控制器相关寄存器的初始化,在获取网卡信息的情况下,指定网卡总线的类型和设备中断ID号,然后为片内存储器分配内存,绑定虚拟地址.另外,主要用于创建一个驱动程序加载所需的注册表信息,例如网卡读写超时,设备名称等,同时为包括网卡控制流程信息提供进程.

(3)USBUninstallDriver()函数.主要用于释放驱动程序所占用的资源,释放其他进程所占用的内存空间,以及删除USBInstallDriver()函数创建的注册表等.这个过程与USBInstallDriver()函数操作顺序相反.解除注册信息,可以使空函数.

3.2系统流接口驱动函数实现

USB无线网卡驱动程序实现流接口形式驱动以后,文件系统的API接口通过访问特殊文件来实现与设备信息的交换,流接口函数直接调用与硬件设备相关的处理函数,省去层与层之间调用和信息传递,有利于提高驱动实现的实时性.在系统软件整体框架的基础上,设计系统流接口驱动函数实现流程如图5所示[11,12].

在软件实现前,系统首先检测USB无线网卡硬件是否连接,如果找到相应的硬件设备,打开设备管理器Device.exe,连接I/O控制,查询到设备后加载驱动配置传输模式,根据获取的加载流驱动程序是否成功调用API命令决定是否再加载,直至成功加载,关闭设备.USB无线网卡流接口驱动是通过初始化函数USB_Init、打开设备管理函数USB_Open、I/O控制函数USB_ IOControl、从系统总线读取图像信息函数USB_ Read、向系统总线写入控制命令函数USB_Write、设备卸载函数USB_Deinit等9个基本功能函数来实现[13].

图5 软件实现流程图

系统通过驱动程序提供的入口函数和上述接口函数实现,在USB无线网卡实现过程中完成了硬件的初始化、时序同步、信息流控制等功能,起到设备的控制中枢作用.在流式驱动开发完成后,通过编写应用程序在嵌入式终端的触摸屏上显示出来.流接口函数直接调用与硬件设备相关的处理函数,省去层与层之间调用和信息传递,有利于提高系统工作过程控制的实时性.

4 系统测试

完成基于流式接口驱动的USB无线网卡驱动开发以后,需要对系统的性能和一些参数进行现场调试.和其他接口不一样,USB无线网卡模块可以轻松实现热插拔,嵌入式系统会自动识别到接口有硬件载入,并调用内核无线网卡驱动程序实现它们之间数据的交互,USB无线网卡模块驱动程序初始化包括注册表的写入,函数的加载启动信息反馈到调试软件上,无线模块在加载驱动时的启动信息如图6所示.

图6 USB无线网卡驱动加载信息

调试中已经配好无线通信网络,从系统的无线网卡窗口会搜索到相关的无线信息,如图7所示.在调试中使用无线宽带路由器,系统会自动搜索到,设置好安全选项之后连接即可.

图7 USB无线网卡连接

从USB无线网卡现场测试环境和结果看来,设计基于流式接口驱动的USB无线系统具有体积小、功耗低、运行速度快、连接方便等特点,设计具有友好的人机交互界面,具有很好的实用推广价值.

5 小结

Windows CE系统流接口设备驱动程序是一种结构比较简洁的驱动程序,在Windows CE驱动中占有重要的位置.本文在透彻了解了驱动开发的机理后,以USB无线网卡驱动开发为例详细阐述平台流接口驱动整体流程设计与驱动函数实现方式,表明系统运行稳定、可靠,基本满足系统设计的目标要求.在此基础上,还可以向驱动程序中添加自己需要实现的其它功能,甚至应用程序的一部份功能也可以在加载驱动时实现,为其他类似驱动开发提供参考,同时也为后期有特殊需要的应用程序开发奠定基础.

参考文献

1张冬泉,谭南林,王雪梅等.Windows CE 实用开发技术.北京: 电子工业出版社,2006.

2陈凯,邓明,张启东等.大地电磁仪的Windows CE启动程序设计.计算机工程,2008,34(13):277–279.

3贾银洁,许鹏飞.USB无线网卡驱动程序的设计.广东电脑与电讯,2007(10):13–14.

4叶学程,郑霖.嵌入式Linux的USB—Chirp无线网卡驱动设计.单片机与嵌入式系统应用,2014(7):53–56.

5侯战胜,姚放吾.基于i.MX21的AdHoc网络终端的设计与实现.微机发展,2010(1).5–8.

6郑秀杰.基于嵌入式WinCE 6.0的脉冲/数据发生器软件设计.现代电子技术,2013,12:83–85.

7何宗键.Windows CE嵌入式系统.北京:北京航空航天大学出版社,2006.

8龚小林,段建红.基于Windows CE.Net嵌入式系统的数据库设计与应用.现代电子技术,2013,32(20):71–74.

9辛华峰,于枫,谭健,王文丽.嵌入式 USB 主从机应用模块.吉林大学学报(工学版),2005,35(2):18–21.

10刘全利,宋健军,王伟.基于USB总线的多功能车辆总线网卡设计与实现.上海交通大学学报,2011,45(8):1207–1210.

11胡彬彬,郭淑琴.支持WPA加密的无线网卡驱动分析与功能实现.电声技术,2014,38:82–85.

12Purcell,A.Quickly and easily automate test systems with USB.Electronic Design,2002,50 (23):67–70.

13汪兵.Windows CE嵌入式高级编程及其实例详解.北京:中国水利水电出版社,2008.

USB Wireless Network Card Based on Stream Interface-driven

PAN Ze-Kai,QIN Gui-Li,LUO Yun-Fang
(Department of Computer and Electronic Information Engineering,Guangxi Polytechnic,Nanning 530226,China)

Abstract:Aimed at Windows CE system-driven development,the development and design of USB wireless network adapter under the frame of streaming interface drive mode strategy is proposed.The overall process design of the platform streaming interface drive and the function implementation mode of USB wireless network adapter are elaborated.Field testing results show that the system is stable and reliable in operation and can basically satisfy the service objects of the system design.

Key words:stream interface; embedded systems; USB; wireless network card

基金项目:① 广西区教育厅自然科学基金(YB2014488,KY2015YB384);广西职业技术学院自然科学资金(121208)

收稿时间:2015-08-14;收到修改稿时间:2015-09-28

猜你喜欢
嵌入式系统
Teaching Research on IoT and—Embedded System of Software Engineering
基于Xilinx口袋实验室的组合逻辑电路设计实验
面向应用的智能专业嵌入式系统教学
基于AVR单片机的SPI接口设计与实现
办公自动化系统的设计
基于物联网项目驱动的嵌入式系统教学改革的研究与实践
嵌入式系统课程“中断、异常与事件”教学实践及启示
面向实践创新人才培养的嵌入式系统教学研究