首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

S3C2442 WinCE 6.0 Nand Flash文件系统及Hive注册表有关问题

2012-03-20 
S3C2442 WinCE 6.0 Nand Flash文件系统及Hive注册表问题硬件平台: S3C2442(内含64M SDRAM及128MB Nand)外

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------

[解决办法]

探讨
自顶,呼唤高人!

热点排行