WinXP下USB驱动开发(四)

简介: 第3节       设计说明 3.1.       概要设计 该任务主要包括上位机USB驱动开发、LPC2440 下位机程序开发、调试三部分。其中LPC2440 下位机程序开发部分已经完成,不需要再行设计和开发。

第3节       设计说明

3.1.       概要设计

该任务主要包括上位机USB驱动开发、LPC2440 下位机程序开发、调试三部分。其中LPC2440 下位机程序开发部分已经完成,不需要再行设计和开发。因此接下来的任务主要由上位机USB 驱动开发和调试两部分构成。严格来说调试又分检测软件的编写和整体调试两部分。因此我们的设计工作主要如下几部分(3-1-1)

概要设计如下:

上位机USB驱动设计:采用WDM驱动设计模式开发,遵循严格的USB2.0规范,实现即插即用、数据传输等驱动功能。为提高驱动的稳定性和传输数据的准确性,在USB驱动编写阶段加入过虑驱动,主要实现传输的数据过虑、剔除异常数据,同时为支持多电源状态,在编码阶段还需加入了电源管理模块,提高USB驱动的适应性和稳定性。USB驱动安装也是该部分设计的需要的注意的问题,由于采用WDM模式进行设计,因此我们采用编写inf文件、手动安装。

检测软件设计:采用Microsoft Visual C++ 6.0编写,主要实现USB数据传输等功能,方便与最后的整体调试。

整体调试:该部分主要包括Windbg调试和检测软件调试两部分。该整体调试采用白盒测试,对所有的功能或这特功能进行一一检测,并与测试用例结果对比。在测试当中,用例的选择采用边缘化数据和局部数据双重测试,保证测试的准确性。

3.2.       驱动模型

Windows 驱动程序模型(Windows Driver ModelWDM) 是一种模型结构,它建立在物理设备对象(Physical Device ObjectPDO) 和功能设备对象(Functional Device ObjectFDO) 的结构化分层基础上。WDM模型为了适应即插即用系统,重新定义了驱动程序分层,它至少存在总线驱动程序和功能驱动程序,根据需要还可以选择过滤器驱动程序。通常情况下,连接到总线的每个物理部件都有一个PDO,承担由硬件实现的低级设备控制的责任。更高级软件则都存在一个FDO。当存在IPO 操作时,IRP 请求包( IPO Request Packet) 首先被送到上级过滤器驱动程序,然后被一级一级的往下传递,最后由总线驱动程序完成对设备的操作。

USB 系统驱动程序采用WDM结构,具体结构如图3-2-1 所示。其中设备驱动程序位于整个结构的最顶层,它不直接操作硬件,而是通过USBD 接口传递请求。

3.3.       详细设计

WindowUSB驱动开发主要分驱动程序,安装和调试几个方面进行设计。其中程序设计相对复杂,包括对USB数据结构、WMI、电源管理、PNP等进行分析和设计。安装和调试相对简单,安装阶段主要的任务是编写配置文件( .INF),调试阶段的任务主要针对驱动的读写进行测试,如果读写成功,说明驱动运行正常。

3.3.1.  构建VC++6.0编译环境

微软提供的DDK只是一个编译环境,只能在CMD中进行输入Build进行调试,这种调试凡是特别不方便,CMD调试的错误结果只能显示代码的行号,无法做到错误适时定位。其实在实际的驱动开发过程当中已经很少在CMD中调试了,大多数的程序员都是采用VC++6.0开发环境来进行调试的。VC++6.0本身并未Windows驱动的调试环境,需要自己手动配置,如下图解构造VC++6.0的编译环境;

一、设置添加新的编译环境,命名为Driver_Check,操作步骤:[Build]—>[Configurations]如图3-3-1-0

二、设置C/C++环境,进入 [Project]—>[Settings]—>C/C++,然后将想如下代码拷贝到Project Options当中。

/nologo /Gz /MLd /W3 /WX /Z7 /Od /D WIN32=100 /D _X86_=1 /D WINVER=0x500 /D DBG=1 /FR"Driver_Check/" /Fo"Driver_Check/" /Fd"Driver_Check/" /FD /c

三、设置Link环境,进入 [Project]—>[Settings]—>Link,然后将想如下代码拷贝到Project Options当中。

wdm.lib /nologo /base:"0x10000" /stack:0x400000,0x1000 /entry:"DriverEntry" /subsystem:console /incremental:no /pdb:"MyDriver_Check/HelloWDM.pdb" /debug /machine:I386 /nodefaultlib /out:"Driver_Check/HelloWDM.sys" /pdbtype:sept /subsystem:native /driver /SECTION:INIT,D /RELEASE /IGNORE:4078

四、添加相关路径,进入[Tools]—>[Options]—>Directories,将WINDDK的相关文件路径添加到其中,并置顶,如下图解。

通过以上的步骤,设置VC++6.0 DDK的编译环境基本完成。然而、对于USB的开发还需要在Link中加入wmilib.lib hidclass.lib usbd.lib ntoskrnl.lib这几个链接库。

目录
相关文章
|
2月前
|
Linux 编译器 芯片
Linux 驱动开发基础知识—— 具体单板的 LED 驱动程序(五)
Linux 驱动开发基础知识—— 具体单板的 LED 驱动程序(五)
50 0
Linux 驱动开发基础知识—— 具体单板的 LED 驱动程序(五)
|
11月前
linux4.1.15内核移植到野火PRO开发板开发板
linux4.1.15内核移植到野火PRO开发板开发板
178 0
|
Linux Go 网络安全
嵌入式Linux USB WIFI驱动的移植
硬件平台:飞思卡尔MX258开发板 操作系统:Linux2.6.31 WIFI:    RT2860 USB WIFI模组 交叉编译环境:gcc version 4.1.2   调试步骤: 第一步:测试USB HOST接口 在menuconfig中将USB HOST设置为内核模式: ...
1597 0
|
消息中间件 API
VxWorks下USB驱动总结1
<div id="cnblogs_post_body"> <p align="left"><span style="color:#3c3c3c"><span style="font-family:Times New Roman; font-size:24px">1、USB设备</span></span></p> <p align="left"><span style="color:#3
1775 0
|
网络协议 测试技术 监控
VxWorks下USB驱动总结2
<p>3:USBD驱动详解 </p> <p>这一部分将要描述USBD(USB Host Driver)的典型应用。例如初始化,client注册,动态连接注册,设备配置,数据传输,同时还探讨了USBD内部设计的关键特性。这部分是VxWorks下USB驱动的核心。 </p> <p> </p> <p>1 初始化USBD:分为两步 </p> <p>(1)必须至少调用一次函数usbdIni
2006 0
|
Windows
Windows XP下USB转串口驱动编码实现分析
       USB转COM驱动的编写实现有很多中方法,最近在网络上看到一个最常用的方式,即是虚拟一个COM口,在COM初试的时候进行打开一个USB设备.
1020 0
|
移动开发 Windows
WinCE虚拟串口驱动(二)
//========================================================================  //TITLE:  //    WinCE虚拟串口驱动(二)  //AUTHOR:  //    ...
681 0
|
移动开发 缓存 定位技术
WinCE虚拟串口驱动(一)
 //========================================================================  //TITLE:  //    WinCE虚拟串口驱动(一)  //AUTHOR:  //   ...
697 0

热门文章

最新文章