WINCE MLC flash丢固件(无法正常启动到桌面)如何取出客户数据
大家好,WINCE6.0+S3C2451的设备,采用ROM-only文件系统和MLC FLASH,客户在使用过程中系统无法正常启动,但是客户的数据是保存在根目录下,现在客户要求把数据取出来。
尝试:
通过TF卡启动的方式更新系统(之前的处理是更新的时候会清除根目录,我做了修改,在更新的时候不清除根目录,以确保不清除客户的数据),但是在更新过程中发现ECC校验出错,但还是更新成功,更新之后但无法正常启动,停留在下面的信息处:
Windows CE Kernel for ARM (Thumb Enabled) Built on Oct 20 2009 at 18:39:19
INFO:OALLogSetZones: dpCurSettings.ulZoneMask: 0xb
+OEMInit()
DCache: 128 sets, 4 ways, 32 line size, 16384 size
ICache: 128 sets, 4 ways, 32 line size, 16384 size
FCLK:400000000, HCLK:133333333, PCLK:66666666
+OALArgsInit()
Arguments area has some values.
-OALArgsInit()
-OEMInit()
OEMGetExtensionDRAM
[OEMIO:INF] + IOCTL_HAL_POSTINIT
[OEMIO:INF] - IOCTL_HAL_POSTINIT
[OND:INF] InitializeCriticalSection(&v_DiskCrit)
[HALWP:INF] nCtrlCode = PM_HAL_FIL_INIT
[HALWP:INF] nCtrlCode = PM_HAL_VFL_INIT
[HALWP:INF] nCtrlCode = PM_HAL_VFL_OPEN
[OND:OUT] ++OpenDriverKey()
[OND: ] OpenDriverKey RegOpenKeyEx(HLM\Drivers\Active\02) returned 0!!!
[OND: ] OpenDriverKey - RegQueryValueEx(Key) returned 0
[OND:OUT] --OpenDriverKey()
[OND:MSG] GetBmlId - BmlPartitionId = 8
[OND:MSG] GetBmlId - StartSector = 0
[OND:MSG] GetBmlId - NumOfSector = 524288
[OND:MSG] GetBmlId - BmlVolumeId = 0
[FTL: IN] ++FTL_ReadReclaim()
[FTL:INF] FTL_ReadReclaim(nVbn = 65535(0xffff))
/*************出错信息的起始处,正常情况下是不会有的***********/
[VFL:ERR] VFL_Erase(nVbn:65535) input overflow!
[FTL:ERR] there is error on VFL_Erase!
[FTL:ERR] there is error on _MoveD2F!
[FTLP:ERR] FTL_ReadReclaim() failure. ERR Code=80010000
[OND:ERR] FTL_ReadReclaim failed on DSK_Open
/*************出错信息的结束处,正常情况下是不会有的***********/
[OND:MSG] FTL_ReadReclaim [OK]
[OND:OUT] ++GetDeviceInfo()
[OND:OUT] ++OpenDriverKey()
[OND: ] OpenDriverKey RegOpenKeyEx(HLM\Drivers\Active\02) returned 0!!!
[OND: ] OpenDriverKey - RegQueryValueEx(Key) returned 0
[OND:OUT] --OpenDriverKey()
[OND: ] GetProfileName - Profile = FlashDisk, length = 20
[OND: ] Order = 0, length = 4
[OND:OUT] --GetDeviceInfo()
[OND:MSG] ++GetStorageID
[OND:MSG] --GetStorageID
OEM: Not clearing storage
如果是正常启动,接下来应该输出:
OEM: Not cleaning system hive
OEM: Not cleaning user profiles
OEM: Not cleaning system hive
I2C_Init()
………………
如果要取出客户的数据,大家有什么想法,麻烦分享一下,先谢谢了。
[解决办法]
先想办法复制出整个FLASH的内容。然后用块同样系统的正常的FLASh和现在这个取出来的FLALSh数据进行对比,取出好的FLASH数据的OS部分和BOOT部分保存块。
[解决办法]
我的做法是:只更新OS镜像和BOOTLOADER区域。其他区域没有更新,因此我的系统若更新系统,是不会覆盖掉用户数据的。这个可以在bootloader里改的。我的是SLC的,你的MLC就不懂了,可能跟你驱动有关系吧?!
[解决办法]
要取出flash里的客户数据,就要把整片flash读出,然后进行文件系统分析(需要有专用的软件)。我们是做这块的强项,找我们帮你搞定吧。呵呵。
[解决办法]
[解决办法]
遇到过这种问题。
没辙,
因为nandflash 的fat 分区表已经损坏,重建分区表 就会导致数据不再了。
不像inand 和SD卡,重建分区表,数据依然在,只要不全盘格式化。
楼主想到办法贴出来欣赏一下。
[解决办法]
MLC跟驱动有关系的吧
MLC是有不稳定的表现,是不是原因在于工艺缺陷?