大家好!
最近我在搞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个函数的实现!
恳请高人指教一下,谢谢!!!
ARM9的USB设备驱动开发相关问题 请教USB DEVICE 驱动的一个问题 移植USB Mass storage Device驱动 百分求救:wdm USB驱动,两个device总是会互相影响 奇怪的问题(arm下驱动usb摄像头) 期待高手帮忙 usb 摄像头驱动问题
谢谢xilidecai指教!!
你所说的是在common.reg里和USB Device(与特定平台相关的USBFN)驱动下的注册表设置.
在common.reg里的我没有改,在平台下的reg我还得试试.
在插上U盘之前我已经在该FLASH上建立了一个FAT32分区,并成功挂载,是否因为这样所以再想通过USB挂载它为U盘就会冲突??
请大家多多指教!!
将CE设备当做U盘使用,需要添加添加组件USB Function Bus Drivers下的选项,还要添加USB Function Clients下的选项Mass Storage!其他的好象也没什么特别的东西要做。
引用: 引用 13 楼 kkkcxf1981 的回复:
在插上U盘之前我已经在该FLASH上建立了一个FAT32分区,并成功挂载,是否因为这样所以再想通过USB挂载它为U盘就会冲突??
请大家多多指教!!
这个不会导致冲突
回xingjling:
要添加USB Function Clients下的选项Mass Storage,这个我已经加了!
同时还添加了
core os service下面那个usb host support->usb storeage class driver
至于你说的要添加USB Function Bus Drivers下的选项,我觉得不用了,它好象是针对特殊芯片才有效的
回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 的驱动???
你不会从0开始搞BSP吧?看你貌似没有BSP就搞起了,
这个没有做过真是帮不了了。
LZ 多看看USBF下的文件
不会就只有sources吧
呵呵,我这有bsp的,上面生成dll的source都仔细看了,我的目的很简单,就是通过usb线将wince设备和PC相连,然后在PC上被识别为U盘,应该不用再添加USB HOST SUPPORT 功能了,gooogleman兄指点一下啊
再问一下:
不知大家是怎么做的,在PC端被识别为U盘,还需要借助ActiveSync 软件吗?还是自动被PC端的操作系统识别出来??
引用: 引用 5 楼 kkkcxf1981 的回复:
再问一下:
不知大家是怎么做的,在PC端被识别为U盘,还需要借助ActiveSync 软件吗?还是自动被PC端的操作系统识别出来??
这个没有做过,既然是u盘,应该不用这个软件了。
我看论坛前些日子有人给了答案了,你搜索一下吧。
貌似注册表以及驱动都要改一些的。
我的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:
楼主说的这个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的代码