USB Device驱动的问题!

jiaojiao0626   2009-9-4 10:41 楼主
大家好!

最近我在搞USB Device驱动,我对所有USB都必须实现的3个函数:USBInstallDriver,USBUnInstallDriver,USBDeviceAttachy有疑惑,不知他们是需要在哪里实现的!!
按照我的理解就是在选择了USB的3中应用的其中一个后:
catalog->Device Drivers->USB FUNCTION->USB FUNCTION CLIENTS->MASS STORAGE 就不需要再实现上面3个函数了???
看了我的BSP包里有个USBF文件夹下放了该驱动,其中的sources内容如下:

RELEASETYPE=PLATFORM
TARGETNAME=at91sam9261ek_usbfn
TARGETTYPE=DYNLINK


TARGETLIBS= \
  $(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib \
  $(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\ceddk.lib \

SOURCELIBS= \
  $(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\ufnmdd.lib \
  $(_PLATCOMMONLIB)\$(_CPUDEPPATH)\at91sam926x_usbfn.lib \

SOURCES= \
  AT91SAM9261EK_usbfn.cpp \

DLLENTRY=DllEntry
DEFFILE=AT91SAM9261EK_usbfn.def
FILE_VIEW_RESOURCE_FOLDER= \
  AT91SAM9261EK_usbfn.reg \


根据我的观察,上面最终生成的DLL里并没有那3个函数的实现!

恳请高人指教一下,谢谢!!!

回复评论 (80)

ARM9的USB设备驱动开发相关问题 请教USB DEVICE 驱动的一个问题 移植USB Mass storage Device驱动 百分求救:wdm USB驱动,两个device总是会互相影响 奇怪的问题(arm下驱动usb摄像头) 期待高手帮忙 usb 摄像头驱动问题
点赞  2010-4-14 13:46
谢谢xilidecai指教!!

你所说的是在common.reg里和USB Device(与特定平台相关的USBFN)驱动下的注册表设置.
在common.reg里的我没有改,在平台下的reg我还得试试.

点赞  2009-9-7 09:20
在插上U盘之前我已经在该FLASH上建立了一个FAT32分区,并成功挂载,是否因为这样所以再想通过USB挂载它为U盘就会冲突??
请大家多多指教!!
点赞  2009-9-7 15:50
将CE设备当做U盘使用,需要添加添加组件USB Function Bus Drivers下的选项,还要添加USB Function Clients下的选项Mass Storage!其他的好象也没什么特别的东西要做。
点赞  2009-9-7 17:47
引用: 引用 13 楼 kkkcxf1981 的回复:
在插上U盘之前我已经在该FLASH上建立了一个FAT32分区,并成功挂载,是否因为这样所以再想通过USB挂载它为U盘就会冲突??
请大家多多指教!!


这个不会导致冲突
点赞  2009-9-7 18:24
mark
点赞  2009-9-7 22:57
昨天我就遇到了这种问题 谢谢
点赞  2009-9-8 07:41
回xingjling:
要添加USB Function Clients下的选项Mass Storage,这个我已经加了!
同时还添加了
core  os  service下面那个usb  host  support->usb  storeage  class  driver
至于你说的要添加USB Function Bus Drivers下的选项,我觉得不用了,它好象是针对特殊芯片才有效的
点赞  2009-9-8 08:54

10楼 lf 

回unsway123:
昨天我将NOR FLASH 驱动的注册表里和文件系统有关的部分都注释掉了,只让它单单导出个流驱动接口,
在加载该驱动的时候比以前多了这样一句:[NOTIFY] HandleSystemEvent 7 /ADD DSK1:
同时也可以打开DSK1:了 如下:

3720637 PID:63aba496 TID:a3a91b3e 0x83a43640: UsbMsFn!STORE_Init: IOCTL_DISK_GETINFO passed
3720667 PID:63aba496 TID:a3a91b3e 0x83a43640: UsbMsFn!STORE_Init: bytes per sector = 512
3720692 PID:63aba496 TID:a3a91b3e 0x83a43640: UsbMsFn!STORE_Init: cylinders = 418
3720717 PID:63aba496 TID:a3a91b3e 0x83a43640: UsbMsFn!STORE_Init: flags = 0x8
3720742 PID:63aba496 TID:a3a91b3e 0x83a43640: UsbMsFn!STORE_Init: heads = 1
3720767 PID:63aba496 TID:a3a91b3e 0x83a43640: UsbMsFn!STORE_Init: sectors = 252
3720797 PID:63aba496 TID:a3a91b3e 0x83a43640: UsbMsFn!STORE_Init: total sectors = 105336
3720817 PID:63ae6b52 TID:a3a91b3e 0x83a43640: FSD_UnmountDisk(0xb98f0): unmounting...
3720842 PID:63ae6b52 TID:a3a91b3e 0x83a43640: FATFS!UnmountDisk: unmounting all volumes on disk 000B98F0

虽然打开了但PC上还是显示无法识别的设备,设备状态栏说是没有为该设备安装驱动,不知大家在这样做的时候,是否还需要在PC端做个windowsxp/2000 下的识别CE DEVICE 的驱动???
点赞  2009-9-8 09:06
自己顶.

希望大家多多指教
点赞  2009-9-4 13:06
你不会从0开始搞BSP吧?看你貌似没有BSP就搞起了,
这个没有做过真是帮不了了。
点赞  2009-9-4 14:05
LZ 多看看USBF下的文件
不会就只有sources吧
点赞  2009-9-4 14:29
呵呵,我这有bsp的,上面生成dll的source都仔细看了,我的目的很简单,就是通过usb线将wince设备和PC相连,然后在PC上被识别为U盘,应该不用再添加USB HOST SUPPORT 功能了,gooogleman兄指点一下啊
点赞  2009-9-4 15:22
再问一下:
不知大家是怎么做的,在PC端被识别为U盘,还需要借助ActiveSync 软件吗?还是自动被PC端的操作系统识别出来??
点赞  2009-9-4 15:29
引用: 引用 5 楼 kkkcxf1981 的回复:
再问一下:
不知大家是怎么做的,在PC端被识别为U盘,还需要借助ActiveSync 软件吗?还是自动被PC端的操作系统识别出来??


这个没有做过,既然是u盘,应该不用这个软件了。
我看论坛前些日子有人给了答案了,你搜索一下吧。

貌似注册表以及驱动都要改一些的。
点赞  2009-9-4 15:38
谢谢gooogleman老兄,呵呵
点赞  2009-9-4 16:07
我的ce设备上有个NOR FLASH被作成了 FAT32,设备名就是 DSK1,注册表如下:
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\FlashDrv]
    "Dll"="FLASHDRV.dll"
    "Prefix"="DSK"
    "Index" =dword:1
    "MemBase"=dword:40000000      
    "MemLen"=dword:04000000              
    "Order"=dword:0   
    "Profile"="FlashDrv"
    "IClass"="{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
    ;"MountFlags"=dword:11
    "MountFlags"=dword:10
    "BootPhase"=dword:0

我打算把它作为U盘使用,可是当我插上USB时候,出现了以下问题,好象是无法打开这个设备的错误,这是为何??

705789 PID:839df756 TID:e3927fc6 0x838e1400: UsbMsFn!STORE_Init: DeviceName = DSK1:
705814 PID:839df756 TID:e3927fc6 0x838e1400: UsbMsFn!STORE_Init: Removable = 1
705839 PID:839df756 TID:e3927fc6 0x838e1400: UsbMsFn!STORE_Init: failed to open store DSK1:; error = 4319
705864 PID:839df756 TID:e3927fc6 0x838e1400: ERROR: c:\macallan\public\common\oak\drivers\usbfn\class\storage\transport\bot\bot.cpp line 907:

点赞  2009-9-5 15:21
楼主说的这个USB device是USB slave方面的驱动吗?根据我看你的source文件,因为有ufnmdd.lib所以我认为他是一个USB slave方面的驱动。根据你说的这个是要让PC机把你的板子当成一个U盘,那这就是一个slave的驱动了。。。
对于USB slave的驱动是不需要这3个函数的,这三个函数是USB host用到的三个函数,是为了让内核能加载你的驱动而实现的三个函数,这三个函数咋USBd里面。
对于USB slave的驱动,是主要通过UFNmdd.lib里面的流式接口来加载整个驱动的,这个lib他会去加载你写的那个slave 的dll.这些dll你可以通过public下的usbfn下的class中找到相应的来生成DLL,具体的你可以看那里面关于massstorage的代码
点赞  2009-9-6 12:31
提示: 作者被禁止或删除 内容自动屏蔽
点赞  2009-9-6 16:32
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复