正如所料,接下来我们就进入到DRIVERS/USB/CLASS/STORAGE/CLASS文件夹下,接触USB设备驱动程序。
我们先来了解两个头文件,分别是STORAGE/INC/usbmsc.h和STORAGE/CLASS/usbmscp.h,其中前者是USB存储设备公用的头文件,后者是需要按照自己的设备更改的头文件。我们先来看前者。
在usbmsc.h这个头文件中,前边定义了很多常量,包括子类和协议的常量,这是从哪里来的呢?前文我们已经提到过,这些量值是依据USB设备规范得来的,在规范上都作了定义,所以此处的值必须与USB规范中的相一致。再向下的命令块结构体和数据块结构体是用来与USB设备通讯用的,可以通过这两个结构体的实例与USB设备传输数据。 下面的函数原型就不说了,前文提到过,在这里只记得有这几个函数就行了。
再来看usbmscp.h这个头文件,这个头文件是要按照自己的需要和USB设备来进行修改的,比如DRIVER_NAME_SZ是驱动程序的名字,RESET_TIMEOUT 是一个超时的默认值。还有很重要的一个就是USBMSC_DRIVER_SETTINGS的设置,这个设置是与USBDI.H中的USB_DRIVER_SETTINGS结构体一一对应的,为了符合我自己的设备,通常要把dwVendorId和dwProductId等设置成设备的对应值,比如我的U盘的VendorID是0x058F,ProductID是0x9321,那我就会把这两个值对应的写在相应的位置上。同时在系统注册表中也会利用这两个值修改注册表的键以便设备管理器可以顺利的找到我的设备驱动。
下面还有一个_USBMSC_DEVICE结构体,它是用来描述你自己的USB存储设备的,是封装了USBD函数表指针、磁盘设备指针、管道和配置项的最重要的数据结构,在驱动程序实现上此数据结构就是重点的参数,鉴于样例程序对每一个结构体元素都作了明确的注释,此处我就不一一描述了,它就像C++中的类一样,是最后把一些小类组合起来的可以最终使用的结构。
好了,对这两个头文件有所了解以后,我们就进入最关键的部分,源程序。我们接下来来看usbmsc.c这个文件。为什么要先看这个文件而不是同一文件夹下的其他几个文件呢?我来解释一下。在这个文件夹中有一个usbmsc.def的文件,大家都知道它是定义了导出函数的,通常与它同名的程序文件都会含有DllEntry的入口,既然入口在这,那我们自然就先来看这个文件了。如果用到了其他的文件,再看不迟。
这可是一个有1000多行的源程序,但不要害怕,我们只看最主要的,别的函数的实现你可以自己去研究。首先看到文件的DllEntry入口之前有5个函数原型的定义,从函数名上就可以知道这个函数的功能了,很显然这几个函数是程序实现过程中被调用的,所以目前知道功能就行了,不用了解实现方法。忘了说一句,这个程序中包含了bot.h和cbit.h两个头文件,可见程序中是要用到它们的功能的,不过先不管它,继续往下看。
DllEntry入口函数的下面,就是USBInstallDriver()这个函数了,它的作用是进行与USB设备相关的注册表操作,主要的语句是: bRc = RegisterClientDriverID( wsUsbDeviceID ); bRc = RegisterClientSettings( szDriverLibFile, wsUsbDeviceID, NULL, &usbDriverSettings ); 即先注册设备类别,然后是设备细节。 同样,USBUnInstallDriver()函数是以相反的顺序解除注册信息的。 这几个与注册有关的函数在前面我们提到过,是由USBD接口提供的,这里我们可以看到USBD对设备驱动程序的重要性。
|
相关推荐
Linux下USB设备驱动程序的编写.pdf
随着USB设备的不断增加,我们这些开发人员也就多了对USB设备进行驱动程序开发的工作。但是对于很多初学者来说,存在以下三个困难: 一是对WinCE的驱动程序结构了解得太少,没办法得心应手的专注于驱动程序的开发...
Linux系统下USB设备驱动程序的开发
LINUX设备驱动程序之USB驱动程序LINUX设备驱动程序之USB驱动程序LINUX设备驱动程序之USB驱动程序
首先整体上简要介绍了USB及其通信模型,然后详细讨论了Windows的WDM驱动程序模型,重点阐述了基于WDM的USB设备驱动程序的具体开发过程。最后给出了当前流行的几种USB设备驱动的开发工具及其特点。通过设计USB设备驱动...
关于linux下怎么编写USB设备驱动,讲述了USB基础知识,编写方法
基于Windows+WDM的USB设备驱动程序开发与应用,讲述USB驱动开发的全过程。
USB设备驱动程序开发 详细介绍USB开发过程以及cypress开发
基于uCLinux嵌入式平台上USB设备驱动程序开发 基于uCLinux嵌入式平台上USB设备驱动程序开发
TMS320VC5509设备端USB设备驱动程序源文件
介绍了USB的相关概念及Linux中USB设备驱动程序的框架和重要数据结构。通过设计和实现一个典型的例子,总结了Linux下编写一个USB设备驱动程序的一般方法和技巧。
USB download gadget驱动
万能摄像头驱动程序自动检测摄像头芯片,集成了301、303、168、268、325、211、308、380等市面基本所有方案。不用再担心不知道自己摄像头是什么芯片,不用再担心丢失了驱动程序就无法再使用了!
论文:WindowsXP环境下USB设备驱动程序的开发.pdf
用 DriverWorks开发USB设备驱动程序
USB设备驱动程序与上层应用软件的IO操作设计
基于Linux的USB设备驱动程序实现.pdf
基于EFI的USB设备驱动的开发 ...以USB设备驱动程序开发为例,描述了EFI下设备驱动程序开发的一般过程和方法。包括EFI下驱动模式的分析,USB协议架构和传送方式的解析,以及如何开发EFI下的USB设备驱动程序。
用VC++ 实现USB设备驱动程序的实战实例。学习学习
USB3.0驱动安装包(在winpe下运行)usb3.0驱动程序下载 安装完windows后,认不到鼠标键盘,是因为没有安装usb3.0驱动。处理方法:拷此工具到U盘,然后U盘启动进入winpe,在winpe里运行此工具,提示成功后重启进入...