windows mobile/wince 大容量存储驱动实现介绍

1.       目标:

隐藏系统【设置-连接】里自带的“由USB连接到PC”,添加自己的设置项,在原有功能:“USB ActiveSync、启用高级网络功能”的基础上添加“USB大容量存储器”功能,使USB线连接到PC上时能把设备上的SD卡以移动磁盘的形式呈现出来。

 

2.       模块划分:

此功能开发分为三部分:

(1)       控制面板程序(usbtopc.cpl)。

(2)       功能主程序(主要是UI、逻辑及注册表处理)(usbtopc.exe),点击【设置-连接】里的图标所启动的程序。

(3)       USB驱动转换程序(usbswtich.exe)。

PS:也可以将后面两个程序集成为一个程序,便于加强控制。

 

3.       三者关系:

系统device.exe自动查找cpl程序,在进入【设置】时加载usbtopc.cpl,在设置里添加图标;Usbtopc.cpl捕获双击行为,调用usbtopc.exe,启动功能主程序;选择完要切换的驱动确认后,usbtopc.exe调用usbswitch.exe进行驱动切换。

 

4.       usbtopc.cpl:在【设置】里添加图标,并会捕获双击行为,启动其他程序。

usbtopc.exe:提供功能主界面,处理是否需要切换驱动的逻辑,并根据用户的选择修改相应的注册表信息(DefaultClientDriver)。

usbswitch.exe:根据注册表信息(DefaultClientDriver),进行USB驱动切换。

 

5.       不知缘由CE_MODULES_USBMSFN宏失效,通过在

I:/WM604/PLATFORM/DracoBSP/FILES/wpc/oem.cpm.csv

文件里添加CE_MODULES_USBMSFN,OEMDrivers解决。

 

6.       取消【设置-连接】里的“由USB连接到PC”模块。

在platform.reg中添加如下注册设置:

[HKEY_LOCAL_MACHINE/ControlPanel/PCConnection]

"Group"=dword:2

"redirect"=""

 

7.       添加USB Mass Storage功能

(1)       添加SYSGEN_USBFN_STORAGE宏(所用的bsp上本身就添加了)

(2)       上面的宏原则上会使CE_MODULES_USBMSFN宏生效。(所用的bsp不知为何没生效,第5条给出了解决方案)

(3)       在platform.reg中添加注册表信息(所用的bsp已经给出)

(4)       在platform.bib中添加文件信息。

保证镜像运行起来后,windows目录下有usbmsfn.dll文件,此为usb mass Storage的驱动文件。

示例设置:

[HKEY_LOCAL_MACHINE/Drivers/USB/FunctionDrivers/Mass_Storage_Class]

        "Dll"="usbmsfn.dll"
        "idvendor"=dword:1286
        "idProduct"=dword:A6CD
        "Product"="Marvell Mass Storage"
        "Manufacturer"="Marvell"
        "InterfaceSubClass"=dword:06
        "InterfaceProtocol"=dword:50
        "DeviceName"="DSK2:"
        "Removable"=dword:1

 

 

8.       usb驱动切换程序参照微软源码usbswitch

I:/wm604/PUBLIC/APPS/OAK/SAMPLES/USBSWITCH

核心代码:

DeviceIoControl(hUfn, IOCTL_UFN_CHANGE_CURRENT_CLIENT, &ucn, sizeof(ucn), NULL, 0, NULL, NULL);

 

9.    cpl程序出现的位置设置:

(1)设置注册表(2代表出现在【连接】页)

[HKEY_LOCAL_MACHINE/ControlPanel/usbtopc]

"Group" = dword:2

(2)cpl程序里处理CPL_IDNAME消息,设置控制面板小程序的名称,这个名称可以不跟程序本身的名称相同,但必须跟注册表里设置的名字相同(也便是usbtopc),这便是程序跟注册表里的设置联系的纽带。

 

10. 微软有的版本的usbmsfn.dll 是存在问题的,如果一直有问题,可以换用新版本的dll文件试试。

11. 后来添加了sd卡检测功能,卡不存在时不允许启用 “大容量存储器选项”

具体实现见:WM6.0 UDisk 添加存储卡检测功能开发备忘

12. 如果对USB驱动的概念不清楚,可参考文章:WinCE USB驱动架构及术语明析

13. 如何在”设置“中添加项,参考文章:Windows mobile在控制面板中添加应用



这里这篇是讲wince的

http://blog.csdn.net/nanjianhui/article/details/4466741


作者:ARM-WinCE

 

Mass Storage的实际应用就是U盘,目标板和PC通过USB相连,PC可以把目标板识别为U盘,在很多产品上都很常用。这里介绍一下在WinCE系统中U盘功能的实现。

 

在谈WinCE的USB Mass Storage实现之前,首先要具备以下条件:

1. 开发板支持USBClient设备。

2. 开发板上至少有一种存储设备可以被用来映射为U盘。

 

现在的处理器一般都带有USB Client或者是USB OTG控制器,并且BSP中都有相应的驱动。对于存储设备来说,Nandflash或者SD卡都可以作为存储设备。所以都不是什么问题。下面介绍一下步骤:

 

1. 选择WinCE Mass Storage组件

在定制WinCE的时候,在Catalog Items View中选择”Device Drivers”->”USB Function”->”USB Function Clients”->”Mass Storage”。

 

2. 更改USB Client驱动的注册表配置

在WinCE中,USB Client驱动的注册表配置如下:

[HKEY_LOCAL_MACHINE/Drivers/USB/FunctionDrivers]

“DefaultClientDriver”:设置默认的USB Client驱动,这里应该是Mass_Storage_Class

 

[HKEY_LOCAL_MACHINE/Drivers/USB/FunctionDrivers/Mass_Storage_Class]

“Dll”:USB Client的驱动

“DeviceName”:被映射为U盘的存储设备的设备名

“FriendlyName”:显示设备名

“idVendor”:Vendor ID,应该向USB组织申请

“idProduct”:Product ID,由厂商定义

“Manufacturer”:厂商名

“Product”:产品名

“bcdDevice”:设备的版本号

 

“InterfaceSubClass”:USB Host端通过该值来枚举设备,06h表示Mass Storage。

“InterfaceProtocol”:USB设备所支持的传输协议,50h表示bulk-only。

 

上面对注册表的配置进行了介绍,这里给各例子:

[HKEY_LOCAL_MACHINE/Drivers/USB/FunctionDrivers]

   "DefaultClientDriver"="Mass_Storage_Class"

 

[HKEY_LOCAL_MACHINE/Drivers/USB/FunctionDrivers/Mass_Storage_Class]

   "Dll"="usbmsfn.dll"

   "InterfaceSubClass"=dword:06 

   "InterfaceProtocol"=dword:50 

   "DeviceName"="DSK1:" 

   "FriendlyName"="Mass Storage"

   "idVendor"=dword:048C

   "Manufacturer"="Honeywell"

   "idProduct"=dword:0001

   "Product"="Honeywell Mass Storage"

   "bcdDevice"=dword:0

 

3. 重新编译WinCE工程

由于添加了新的组件,需要重新编译WinCE工程。

 

编译完成后,下载并运行,将设备通过USB连接到PC上,PC就会将设备识别为U盘。


你可能感兴趣的:(windows,存储,Class,dll,redirect,WinCE)