本站首页    管理页面    写新日志    退出


«July 2025»
12345
6789101112
13141516171819
20212223242526
2728293031


公告

☆★☆★☆★☆★☆★☆
生活的点点记录,以及一些体会...........

喜欢是淡淡的爱,爱是深深的喜欢.

时间会见证一切.......................

欢迎大家指出错误,共同进步..........

期待中..............................

☆★☆★☆★☆★☆★☆


我的分类(专题)

日志更新

最新评论

留言板

链接

世纪音频

 

 


Blog信息
blog名称:
日志总数:162
评论数量:312
留言数量:0
访问次数:940536
建立时间:2005年5月17日




[wince study]USB设备驱动程序导读(8)
文章收藏

oceanblue 发表于 2008/5/12 16:24:57

  带着上次留下的疑问,我们继续来学习操作系统如何通过USBDISK读写USB设备的。我们先看USB\CLASS\STORAGE\DISK\SCSI2\usbdisk6.def文件。在这个文件中可以看到,该DLL一共导出了14个函数,其中两个是上次内容当中被设备驱动程序调用的UsbDiskAttach和UsbDiskDetach,余下的是一组以DSK开头的流驱动接口,易见,USBDISK是以流驱动的形式向操作系统提供服务的。

        为了清晰起见,以下大量的程序我们并不学习,而只关心设备读写,因此我们来看DISK.C这个程序文件。找到DSK_Read和DSK_Write两个函数,令我们大失所望,因为这两个函数都是形如
UNREFERENCED_PARAMETER(pDevice);
UNREFERENCED_PARAMETER(pBuffer);
UNREFERENCED_PARAMETER(BufferLength);

DEBUGMSG(ZONE_ER


阅读全文(5016) | 回复(0) | 编辑 | 精华 | 删除
 


[wince study]USB设备驱动程序导读(7)
文章收藏

oceanblue 发表于 2008/5/12 16:23:24

我们来看程序的第4行,这里有一个判断语句,它是在判断插入的设备是否是USBMSC_INTERFACE_CLASS类型的,这个常量是在usbmsc.h文件中定义的,也就是说如果设备不是USB存储设备,那么就结束这个函数,也就是此驱动只能处理USB存储设备。

        当发现设备符合此驱动程序的要求后,就通过函数ParseUsbDescriptors()来解析这个设备,这个函数在下面的程序中将被实现,我们可以看一下该函数的函数体,很显然,它是在为设备进行各种配置,这就不多说它了。

        再往下,分配内存,设置标志,从注册表中读取信息。注意,这里读取到的注册表信息是Drivers\\USB\\ClientDrivers\\Mass_Storage_Class和bInterfaceSubClass变量组合成的注册表键下的值,具体可参阅源程序,这个注册表键下放置的内容是
[HKEY_LOCAL_MACHINE


阅读全文(2970) | 回复(0) | 编辑 | 精华 | 删除
 


[wince study]USB设备驱动程序导读(6)
文章收藏

oceanblue 发表于 2008/5/12 16:21:22

在继续向下看,我们发现了USBDeviceAttach()函数,这可是最重要的地方了,当有USB设备插入插口以后,操作系统是如何识别它的呢,如何将其做为一个文件夹加以访问的呢?我们就来解开这里的谜团。
        为了我们方便说明,我将此程序简化如下:

 

         后面的程序将以此行号进行说明。

阅读全文(1489) | 回复(0) | 编辑 | 精华 | 删除
 


[wince study]USB设备驱动程序导读(5)
文章收藏

oceanblue 发表于 2008/5/12 16:19:23

正如所料,接下来我们就进入到DRIVERS\USB\CLASS\STORAGE\CLASS文件夹下,接触USB设备驱动程序。

         我们先来了解两个头文件,分别是STORAGE\INC\usbmsc.h和STORAGE\CLASS\usbmscp.h,其中前者是USB存储设备公用的头文件,后者是需要按照自己的设备更改的头文件。我们先来看前者。

        在usbmsc.h这个头文件中,前边定义了很多常量,包括子类和协议的常量,这是从哪里来的呢?前文我们已经提到过,这些量值是依据USB设备规范得来的,在规范上都作了定义,所以此处的值必须与USB规范中的相一致。再向下的命令块结构体和数据块结构体是用来与USB设备通讯用的,可以通过这两个结构体的实例与USB设备传输数据。 下面的函数原型就不说了,前文提到过,在这里只记得有这几个函数就行了。

   &nbs

阅读全文(1741) | 回复(0) | 编辑 | 精华 | 删除
 


[wince study]USB设备驱动程序导读(4)
文章收藏

oceanblue 发表于 2008/5/12 16:16:33

    在上次了解了所有USBD接口函数以后,我们已经有了很多基础知识了,回顾USB样例的文件夹结构,我们还能记得USB\CLASS\COMMON这个文件夹下是存放所公共部分的源程序,它是微软专门抽象出来的能为大多数USB设备驱动程序服务的一些结构体以及函数的封装,我们这次再来概略的了解一下这里面的源程序。

        这里面包含了三个程序,分别是:
        remlock        usbclient        utils
        下面我们分别来了解一下这三个程序的功能和接口,很显然,USB设备驱动程序肯定是会用到这其中的一部分函数的,因此我们不一定需要读

阅读全文(2813) | 回复(0) | 编辑 | 精华 | 删除
 


[wince study]USB设备驱动程序导读(3)
文章收藏

oceanblue 发表于 2008/5/12 16:09:12

“广告无限,时间有限”,别看广告了,快回来吧。(发现自己是广告天才,不过耳熟的很,好像游戏上面都有类似的话)

        此前,我们共同了解了USB驱动在CE中的位置结构,也了解了样例驱动程序的文件夹结构,接下来,我们就要了解一下USBD为我们提供了哪些接口来实现设备访问以及驱动程序管理的功能。找到USBDI.H,不要告诉我你找不到吧,不管你用什么编辑器,记事本也好,PB也好,VC/EVC或者VS都行,打开它,我们一起来了解一下USBD为我们提供了什么。

        我们首先看到的一个大的结构体就是_USB_DRIVER_SETTINGS,注意这个结构体不是USB规范中的USB设备描述,而是为了CE设备管理器加载USB设备驱动程序方便而建立的。该结构体中对供应商描述、设备描述和Interface的描述是用来匹配注册表中对USB设备驱动的注册表键,当设备管理器发现你设备的这些值与注册表中的这些值相符时,就会加载你的

阅读全文(2271) | 回复(0) | 编辑 | 精华 | 删除
 


[wince study]USB设备驱动程序导读(1)
文章收藏

oceanblue 发表于 2008/5/12 12:28:26

随着USB设备的不断增加,我们这些开发人员也就多了对USB设备进行驱动程序开发的工作。但是对于很多初学者来说,存在以下三个困难:
        一是对WinCE的驱动程序结构了解得太少,没办法得心应手的专注于驱动程序的开发工作;
        二是对WinCE自带的USB驱动程序的例子没有弄懂,看到一大堆文件夹结构和源程序思维混乱;
        三是几乎没有什么中文的参考资料,不知如何下手。

        第三条是很多开发人员都遇到的,我也一样,很多朋友问我有没有什么资料,我也只能说抱歉,因为我也同样有这个问题,一切都靠自己的黑暗中摸索,因此本文不谈第三条。
        第一条是可以找到资料

阅读全文(4870) | 回复(0) | 编辑 | 精华 | 删除
 


[wince study]WinCE 5.0 的3 種 USB Function Driver
文章收藏

oceanblue 发表于 2008/5/12 8:50:44

  Win CE 5.0 下面 USB Client Function Driver 目前有提供   Serial Profile (Emulator a Serial Port, @CESYSGEN_MODULE_SERIALUSBFN, set SYSGEN_USBFN_SERIAL) RNDIS Profile (Emulator a Network Card, @CESYSGEN CE_MODULE_RNDISFN, set SYSGEN_USBFN_ETHERNET=1) Mass Storage (Emulator a Disk Device, , @CESYSGEN CE_MODULE_USBMSFN, set SYSGEN

阅读全文(3926) | 回复(1) | 编辑 | 精华 | 删除
 


[wince study]S3c2440A平台HIVE注册表+binfs的实现 (转)
文章收藏

oceanblue 发表于 2008/5/9 15:59:01

今天总结一些实现的过程和原理。
我的例子是基于samsung S3C2440A+samsung ONENAND+WinCE5.0的,开发平台是platform builder 5.0,首先我们基于RAM register的image已经可以正常跑起来了,Flash除了放置image外其他的空间为用户提供文件系统,这部分的驱动程序是用三星的PocetStoreII15。

先来回味一下底层的东东,我们的Image主要由两部分组成:XIPKERNEL.bin和NK.bin,XIPKERNEL.bin中的东西就是那些WinCE中比较核心的又需要经常加载的一些程序和DLL文件,这些文件会被Boot Loader在刚启动的时候拷贝到RAM中去,这样就可以在RAM中XIP(Excute in place)了。在NK.bin中的基本上是需要但不至于要常驻内存的一些程序和DLL了,比如我们BuildIn下的大部分驱动,比如微软的IE,mediaplayer等应用程序,甚至连设备管理器device.exe也可以放到这里面,这些文件只有在需要的时候才被复制到内存

阅读全文(1661) | 回复(0) | 编辑 | 精华 | 删除
 


[wince study]WinCE驱动编写 小结 (转)
文章收藏

oceanblue 发表于 2008/5/8 13:39:53

1、基础知识: 1)

阅读全文(2225) | 回复(1) | 编辑 | 精华 | 删除
 


« 1 2 3 4 »



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.078 second(s), page refreshed 144766166 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号