阅读:3434回复:16
如何从XIP改成实现hive注册表和mflash
请问一下各位大侠,小弟的平台是pxa270,wince5.0原来的bsp是xip的nk直接在norflash里运行
现在想实现mflash和hive注册表需要做那些改动啊。 |
|
沙发#
发布于:2007-04-06 19:03
寻求第三方支持,例如IPSM
或是让你的OS在RAM中运行 |
|
板凳#
发布于:2007-04-12 16:37
请问IPSM是什么,如何寻求其支持。
更重要的问题是我现在已经将os改为在ram中运行,并且仿照操作nandflash的方法将norflash分成了binfs分区和扩展分区(这里并不是太理解) 现在需要stratad.dll来挂载MSFLASH分区。这个dll如何得到? |
|
地板#
发布于:2007-04-12 19:28
PB里已经带有了这个驱动
F:\WINCE420\PUBLIC\COMMON\OAK\DRIVERS\BLOCK\MSFLASHFMD\STRATA 参考XSC1BD的BSP |
|
地下室#
发布于:2007-04-13 09:38
谢谢wenzai 我用的是CE5.0,其中也有这个驱动
但是我将驱动加入平台编译时,有错误发生,有几个宏没有定义 WRITE REGISTER ULONG 什么的 真是烦阿 |
|
5楼#
发布于:2007-04-13 12:13
WRITE REGISTER ULONG 未定义?
加上个头文件看看 ceddk.h |
|
|
6楼#
发布于:2007-04-13 15:17
谢谢saint_bxg,我在Targetlibs里加了ceddk.lib这个错误就没有了。应该加上头文件ceddk.h也可以的吧。
现在终于把stratad.dll编译出来了。可是还是没有出现MSFLASH文件夹。注册表里的membase,和memlen应该写什么啊。是eboot里分出的扩展分区的起始地址和大小吗? |
|
7楼#
发布于:2007-04-13 16:57
谢谢两位大侠的帮助,MSFLASH文件夹终于出现了,我发现membase,memlen的值可以随便设定,甚至可以把membase的值设到放nk的区域里,不过这样只能启动一次,因为nk会被写坏。所以我觉的在eboot里把flash分为binfs和扩展分区也是没有必要的。于是实验了一下,eboot中直接用flashwrite把解包后nk写到flash中同样可以正常启动和实现MSFLASH。下面要继续尝试搞定hive了
|
|
8楼#
发布于:2007-04-13 23:06
恭喜rilyyu兄弟!
你的membase,memlen是设置什么的?设置 做存储设备的FLASH的 起始地址和大小? |
|
|
9楼#
发布于:2007-04-14 10:38
我的平台有2片16M的norflash地址是连续的.从BCA00000到BEA00000
其中BCA00000到BCA80000是放eboot和启动参数的 NK的大小大概是0x16xxxxx 所以MEMBASE设的是BE180000 MEMLEN设的是(BEA0000-BE180000) 但是我试验发现MEMBASE设任意值,只要落在flash地址范围内都可以 比如可以把MEMBASE设成BCA80000 同样可以启动,并出现flash文件夹 只不过这样下次就启动不起来了 第一次启动时会很慢,应该是驱动程序在对需要挂载flash进行格式化,下一次就不会了. MEMBASE应该只要不设置到NK区域内任何一个位置都是可以的. |
|
10楼#
发布于:2007-06-26 22:51
请问rilyyu:
你是如何编译出strata.dll的?它的def文件里面都是导出DSK_XXX这样的函数,难道都改成 FMD_XXX这样的? |
|
11楼#
发布于:2007-06-29 09:42
呵呵,太久了,我都有点忘了。刚看了一下def导出的确实是DSK_XXX
也不需要改成FMD_XXX 除非你是用在boot程序里面配合mspart.dll用吧(??) |
|
12楼#
发布于:2007-06-29 13:50
多谢rilyyu,我这几天为这个问题人都快疯了。
我是这样做的: 1、把public下的strata目录拷贝到我的BSP目录下,修改stratad中的SOURCE文件为 TARGETTYPE = DYNLINK 并引用相应的lib文件; 2、编译的时候发现stratad.def文件中的export的函数全为DSK_Open、DSK_Init...,同时还没有DLLMain函数,也不知道怎么修改,只好把fmd.c中以FMD_打头的函数定义在strata.def中 3、编译倒是通过了,将stratad.dll加入platform.bib,然后将stratad.reg的内容加入到platform.reg,并修改下面的内容 "MemBase"=dword:81000000 "MemLen"=dword:00200000 现在发现最后发现根本就不会调用FMD_Init,不知道问题出在什么地方? rilyyu,希望能与你更直接的沟通,我的QQ:1268871,MSN:city_lovelace@hotmail.com,再次表示我诚挚的感谢! |
|
13楼#
发布于:2007-06-29 23:06
呵呵 星期一上班了再和你联系
|
|
14楼#
发布于:2007-07-02 09:24
贴出sources 及reg供你参考
TARGETNAME=stratad TARGETTYPE=DYNLINK RELEASETYPE=PLATFORM DLLENTRY=DllMain DEFFILE=stratad.def WINCEOEM=1 WINCETARGETFILE0=$(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\stratad.def INCLUDES=..\ TARGETLIBS=$(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib\ $(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\CEDDK.lib SOURCELIBS= $(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\fal.lib CDEFINES=$(CDEFINES) -DREAD_FROM_REGISTRY SOURCES=..\fmd.cpp reg文件 ; HIVE BOOT SECTION ;------------------------------------------------------------- ; MsFlash(Strata Flash Driver) ;------------------------------------------------------------- ; StrataFlash block driver. [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\StrataFMD] "Dll"="stratad.dll" "Order"=dword:2 "Prefix"="DSK" "Ioctl"=dword:4 "Profile"="MSFlash" "IClass"="{A4E7EDDA-E575-4252-9D6B-4195D48BB865}" "MemBase"=dword:BE580000 "MemLen"=dword:00480000 ; Support XIP in IMGFS [HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\MSFlash\IMGFS] "XIP"=dword:1 ; Override names in default profile [HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\MSFlash] "Name"="MSFLASH for STRATAFLASH" "Folder"="NOR Flash" [HKEY_LOCAL_MACHINE\System\StorageManager\AutoLoad\MSFlash] "DriverPath"="Drivers\\BuiltIn\\StrataFMD" ; LoadFlags 0x01 == load synchronously "LoadFlags"=dword:1 "Order"=dword:0 "BootPhase"=dword:0 ; Override names in default profile [HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\MSFlash] "DefaultFileSystem"="FATFS" "PartitionDriver"="mspart.dll" "AutoMount"=dword:1 "AutoPart"=dword:1 "AutoFormat"=dword:1 "BootPhase"=dword:0 "Name"="MSFLASH for STRATAFLASH" "Folder"="Flash" "MountFlags"=dword:2 "MountAsBootable"=dword:1 [HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\MSFlash\FATFS] "FriendlyName"="FAT FileSystem" "Dll"="fatfsd.dll" ;"Flags"=dword:00000024 "Paging"=dword:1 "CacheSize"=dword:0 "EnableCacheWarm"=dword:0 "EnableCache"=dword:1 "MountFlags"=dword:2 ; Valid Bits for Flags registry value ; If no flags are set, the hive will be stored in the object store. ; ; 0x00000001 Start storage manager in boot phase 1 for hive-based registry ; 0x00000002 Start device manager in boot phase 1 for hive-based registry ; 0x00000004 Start storage manager in boot phase 1 for registry in ; external ROM (such as BINFS) ; 0x00000008 Start device manager in boot phase 1 for registry in ; external ROM (such as BINFS) [HKEY_LOCAL_MACHINE\init\BootVars] "SystemHive"="Documents and Settings\\system.hv" "ProfileDir"="Documents and Settings" "Start DevMgr"=dword:1 "Flags"=dword:3 "RegistryFlags"=dword:1 [HKEY_LOCAL_MACHINE\init\BootVars] "DefaultUser"="default" ; END HIVE BOOT SECTION |
|
15楼#
发布于:2007-07-02 15:11
在wince5.0下自己设置一下环境变量sysgen_msflash=1就可以得到动态链接库,不需要把他们考出来并且改source文件,怕还需要连接其他的库。
|
|
16楼#
发布于:2007-07-03 09:21
是楼上说的这样的,lib如何链接成dll可以在makedef文件中找到。
|
|