您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 项目8SD卡读写-PDA扩展存储卡的实现
项目8:SD卡读写-PDA扩展存储卡的实现(1)本节课程主要知识点设备管理器扩展SD等存储卡重点和难点重点扩展各类存储卡的基本方法难点设备管理器扩展存储卡的基本原理设备管理器设备管理器设备管理器是一个用户态下的进程,而非操作系统内核的一部份。设备管理器是WindowsCE设备管理的核心,负责对所有设备的驱动程序的管理。虽然不是内核中的进程,但设备管理器在WindowsCE中的地位非常重要。设备管理器组件设备管理器由Device.exe和Devmgr.dll组成。Device.exe包含Devmgr.dll,后者实现了核心设备管理器功能。设备管理器的源代码可以在以下目录下看到C:\WINCE500\PRIVATE\WINCEOS\COREOS\DEVICEDevice.exe在系统启动时通过如下注册表项加载[HKEY_LOCAL_MACHINE\init]Launch20=device.exe“设备管理器的任务(1)加载驱动程序的DLL文件到Device.exe进程的地址空间内。系统启动或新设备接入时加载该设备的驱动程序;不需要该设备时,卸载其驱动程序。例如,在用户插入一个SD卡时,设备管理程序就试图寻找该SD卡的驱动程序并加载。设备管理器的任务(2)统一管理驱动程序,通过读写注册表加载、跟踪驱动程序。实现并提供用户设备管理的API函数,应用程序可以通过这些函数对设备进行访问。提供电源管理接口。提供对I/O资源的管理。设备的初始化WindowsCE的设备初始化分为两个阶段。首先是Device.exe的初始化。其次是外设的枚举和加载。Device.exe的启动WindowsCE在设备上启动后,操作系统内核NK.exe首先运行,NK会根据注册表项[HKEY_LOCAL_MACHINE\init]依次启动一些程序。Device.exe启动后,进行自身初始化工作,以完成设备管理功能。Device.exe的初始化Device.exe启动后初始化所用到的一些数据结构。初始化I/O资源管理器。初始化电源管理器。根据注册表的设置,加载BusEnum.dll,让NusEnum.dll负责加载和初始化所有的内置设备。控制权交给BusEnum,Device.exe任务完成。BusEnum.dllBusEnum.dll称为总线枚举器,主要完成外设的枚举和加载。WindowsCE提供了BusEnum.dll的源代码,在如下的文件夹下C:\WINCE500\PUBLIC\COMMON\OAK\DRIVERS\BUSENUM\BUSENUMBusEnum.dll是可重入的。仔细分析下其源代码。BusEnum.dll的加载Device.exe启动后,会在注册表项[HKEY_LOCAL_MACHINE\Drivers\RootKey]下读取BusEnum.dll。通常RootKey的值为Driver\BuiltIn。根据RootKey的值,Device.exe会加载总线枚举器BusEnum.dll。BusEnum.dll加载是通过ActiveDeviceEx函数加载的。外设的枚举和加载BusEnum.dll加载后,ActiveDeviceEx函数调用BusEnum.dll的导出函数Init()。Init()会根据注册表的设置,会遍历[HKEY_LOCAL_MACHINE\Drivers\BuiltIn]下的所有子键,并加载相应的驱动程序。驱动程序加载后,会根据加载的顺序在注册表子键[HKEY_LOCAL_MACHINE\Drivers\Active]添加一个子键记录已加载的驱动程序。ActiveDeviceEx函数ActiveDeviceEx函数对于加载驱动程序非常重要,根据注册表信息加载驱动程序的过程就是由该函数完成的。卸载驱动是通过DeactiveDevice完成的。课程中安排有利用该函数加载驱动程序的完整实例。ActiveDeviceEx函数原型接口HANDLEActivateDeviceEx(LPCWSTRlpzaDevKey,//指向该设备驱动程序在注册表中的注册键的路径LPCVOIDlpRegEnts,//REGINI结构数组头指针DWORDcRegEnts,//REGINI结构数组成员个数LPVOIDlpvParam,//通常为NULL);返回当前驱动程序注册的句柄内置设备与PnP设备内置设备必须在生成NK.bin前将设备驱动程序的相关信息加入到注册表下[HKEY_LOCAL_MACHINE\Drivers\BuiltIn]以调用BusEnum.dll实现启动系统时加载。对于即插即用设备(PnP),BusEnum.dll负责在设备接入时,即时加载该设备的驱动程序。扩展SD等存储卡扩展SD卡定制一个内核,BSP基于BVDMAIN,在Availabledesigntemplates上选择MobileHandheld。添加USB组件从Catalog-CoreOS-WindowsCEDevices-CoreOSServices-USBHostSupport中添加USBStorageClassDriver。添加FAT组件从Catalog-CoreOS-WindowsCEDevices-FileSystemsandDataStore-StorageManager中添加FATFileSystem。测试SD卡重新编译内核,生成新的NK.bin。如果WindowsCE识别了SD卡,在根目录下,能看到“已装入的卷”,如果没有找到,请将SD卡拔了,再试着插上,直到找到SD卡。编写测试程序,尝试对SD卡进行读写。再插入你的U盘试试?扩展CF卡添加块设备组件查阅手册添加CF组件查阅手册测试CF卡重新编译内核,生成新的NK.bin。如果WindowsCE识别了CF卡,在我的设备下,能看到“硬盘”的设备,如果没有找到,请将CF卡拔下,再试着插上,直到找到CF卡。编写测试程序,尝试对CF卡进行读写。测试硬盘可以通过设备的IDE接口,用40芯的接口线,接入一个硬盘。也可以通过USB口,接入一个移动硬盘。在在我的设备下,能看到“硬盘”的设备。尝试去拷贝硬盘下的文件。
本文标题:项目8SD卡读写-PDA扩展存储卡的实现
链接地址:https://www.777doc.com/doc-803653 .html