S3C2442 WinCE 6.0 Nand Flash文件系统及Hive注册表问题
硬件平台: S3C2442(内含64M SDRAM及128MB Nand)外挂1GB NandFlash,Boot在内部Nand中,外部Nand作文件系统用。
由于打算把NK.bin也放在内部Flash中,也没有采用Eboot,所以外部Flash只划分一个分区,没有BINFS分区。
调试时bootloader通过USB下载NK.nb0到内存直接执行。
软件版本:WinCE 6.0 R3 VS2005
问题描述:
1、启动后资源管理器里看不到NandFlash加载的盘符,能看到Temp、Windows、Documents and Settings、控制面板快捷方式等。存储管理器(Storage Manager)中可以看到存储信息,容量2G,分区Part00已加载,类型0x0B,标志0x00000010,文件系统exfat.dll。
2、如果卸除Part00分区,“开始”菜单中的“程序”等消失,资源管理器进入后显示空白,再装入后恢复。
3、如果卸除、格式化Part00分区后再装入,资源管理器里只能看到Temp和Windows。
4、如果删除Part00分区,新建两个分区1(204800扇区,类型0x06)和2(剩余大小1891837扇区,类型0x0B),则可以在资源管理器里看到NandFlash盘符,查看属性显示已使用40,960字节,剩余922.8M(967614464),与分区2对应。试验如果分成3个分区,会出现NandFlash和NandFlash2两个盘符。
5、通过ActiveSync将文件(记事本文件txt和应用程序exe)传至NandFlash盘中,再复制回来比较与原文件一致。但拷入的小游戏exe文件在NandFlash执行时报错。
Exception 'Data Abort' (4): Thread-Id=04400012(pth=82705be0), Proc-Id=043f0012(pprc=827634a4) '-ýaË.exe', VM-active=043f0012(pprc=827634a4) '-ýaË.exe'
PC=0002d360(-ýaË.exe+0x0001d360) RA=0002d330(-ýaË.exe+0x0001d330) SP=000af6b4, BVA=00000000
6、5后断点重新启动,数据和分区丢失,回到问题状态1。
问题分析:
1、测试底层FMD_WriteSector与FMD_ReadSector没问题,每次Write完后调用Read然后比较,Spare区比较采用确认对应位写为0(由于写Spare时有单独置某bit位为0,其余全为FF的写入)。
2、现象2和3是否表示Hive注册表存在Flash中?
3、现象似乎第一个分区被用作保存Hive,且不能显示。后面的分区可以显示,不明白原因。
4、问题与MBR表有关吗?网上常见的都是一个Flash分为BINFS和FATFS,利用Eboot加载。会不会存储管理器建MBR有问题?
5、一个分区时Nand是不是被Mount到根目录(/)?
困扰了鄙人好几天了,恳请各路高人不吝赐教!!!
论坛积分不多,如有好的建议,将另作答谢:-)
附:
Catlog配置:选择以下组件
RAM and ROM File System
Hive-based Registry
Binary Rom Image File System
exFAT File System(没有选FAT,个人理解6.0中用exFAT替代了FAT,并且存储管理器中看到加载的是exfat.dll)
编译时Bat文件中已加入:
set IMGHIVEREG=1
if /i "%IMGHIVEREG%"=="1" set PRJ_ENABLE_FSREGHIVE=1
if /i "%IMGHIVEREG%"=="1" set PRJ_ENABLE_REGFLUSH_THREAD=1
注册表配置如下:
; @CESYSGEN ENDIF CE_MODULES_DEVICE
;---------------------------------HIVE BEGIN-NEW-----------------------------------------------
; HIVE BOOT SECTION
[HKEY_LOCAL_MACHINE\init\BootVars]
"SYSTEMHIVE"="Documents and Settings\\system.hv"
"PROFILEDIR"="Documents and Settings"
"Start DevMgr"=dword:1
"DefaultUser"="default"
"Flags"=dword:3
IF IMGHIVEREG
"RegistryFlags"=dword:1
ENDIF IMGHIVEREG
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\SMFLASH]
"Prefix"="DSK"
"Dll"="nandflash.dll"
"Index"=dword:1 ;#########这个键值是何意?有影响吗?尝试改为0现象依旧############
"Order"=dword:0
"Profile"="SMFLASH"
"BootPhase"=dword:0
"FriendlyName"="Nand"
"Flags"=dword:1000
"IClass"="{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
[HKEY_LOCAL_MACHINE\System\StorageManager\AutoLoad\SMFLASH]
"DriverPath"="Drivers\\BuiltIn\\SMFLASH"
"LoadFlags"=dword:1 ; load synchronously
"BootPhase"=dword:0
[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SMFLASH]
"DefaultFileSystem"="FATFS"
"PartitionDriver"="mspart.dll"
"AutoMount"=dword:1
"AutoPart"=dword:1
"AutoFormat"=dword:1
"Folder"="NandFlash"
"Name"="NandDisk"
"BootPhase"=dword:0
"Flags"=dword:1000
IF IMGHIVEREG
"MountAsBootable"=dword:1
ENDIF IMGHIVEREG
;[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SMFLASH\BINFS]
; "MountHidden"=dword:1
; "MountAsROM"=dword:1
[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SMFLASH\FATFS]
"FormatExfat"=dword:1
"Flags"=dword:14;FATFS_DISABLE_AUTOSCAN|FATFS_ENABLE_BACKUP_FAT
"DisableAutoScan"=dword:1
"CheckForFormat"=dword:1
"EnableWriteBack"=dword:0
"MountAsRoot"=dword:1
IF IMGHIVEREG
"MountAsBootable"=dword:1
ENDIF IMGHIVEREG
; "MountPermanent"=dword:1
[HKEY_LOCAL_MACHINE\System\StorageManager\FATFS]
"Flags"=dword:00000014 ;FATFS_TFAT_ALWAYS|FATFS_FORCE_TFAT
"MountFlags"=dword:0
[HKEY_LOCAL_MACHINE\System\StorageManager\AutoLoad\SMFLASH\Filters\CacheFilt]
"Dll"="cachefilt.dll"
"LockIOBuffers"=dword:1
[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SMFLASH\FATFS\Filters\CacheFilt]
"Dll"="cachefilt.dll"
"LockIOBuffers"=dword:1
[HKEY_LOCAL_MACHINE\System\StorageManager\AutoLoad\ObjectStore]
"MountHidden"=dword:1
"MountAsBootable"=dword:0
"MountAsRoot"=dword:0
; END HIVE BOOT SECTION
;-------------------------------------HIVE END------
[解决办法]