WINCE6.0刷系统异常

作者:LoongEmbedded

转自:http://blog.csdn.net/loongembedded/article/details/8956584


1.      刷系统异常现象

随着采用SLC NAND FLASH设备的大量使用,在测试和使用过程中发现,在刷系统时可能无法正常启动,一般是在连续刷系统30次之内,基本上会出现刷完系统启动的时候无法正常启动,异常信息如下:

HciManager::ThreadExecute() openDrivers\Builtin\Bcspdrv success

OpenConnection()  portName=COM2:

[HSMMC1] Turn OFF the F/B delay control.

[HSMMC1] Setting for 1 bit mode , ClockRate = 100000 Hz

[HSMMC1] Turn OFF the F/B delay control.

ERR CMD:5 : If the card is not a SDIO, CMD5 does not work in reason.

ERR CMD:1 : If the card is not a MMC, CMD 1does not work in reason.

HCI_OpenConnection() 11111

Exception 'Data Abort' (4):Thread-Id=01950002(pth=87fa3aa4), Proc-Id=00400002(pprc=82d98308) 'NK.EXE',VM-active=00400002(pprc=82d98308) 'NK.EXE'

PC=c003b944(k.coredll.dll+0x0001b944)RA=c0324b34(cachefilt.dll+0x00004b34) SP=d00ffe00, BVA=000000ac

[SDBUS] SD Card Spec Version : 2.00

[SDBUS] SD/SDHC supports the high-speedmode.

[HSMMC1] Setting for 4 bit mode , ClockRate = 50000000 Hz

[HSMMC1] Turn OFF the F/B delay control.

HciManager::ThreadExecute() config  PSconfig.psr success

BcspCommunication::CloseConnection()

HciManager::ThreadExecute() callbcspCommunication.OpenConnection() 111111

OpenConnection()  portName=COM2:

HciManager::ThreadExecute() call bcspCommunication.OpenConnection()22222

KPD_Init

USB Serial Function Class Enabled :Serial_Class

PLUG_IST() main boardV2.0,usbPlugInNewStat=0

+OALIoCtlHalGetDeviceInfo(...)

OALIoCtlHalGetDeviceInfo():SPI_GETUUID

-OALIoCtlHalGetDeviceInfo(SPI = SPI_GETUUID,rc = 1)

UfnClientLib!UfnCheckPID: WARNING -- usingMS reference platform VID/PID 0x045e/0x00ce (not allowed in shipping platforms)

HW_USBClocks::D0

UfnPdd_IOControl()--->IOCTL_BUS_SET_POWER_STATElpceDevicePowerState=0

[DISP:ERR] Disp_initialize_output_interface(): Not Implemented Video Output Mode [1]

 

VDE_IOControl()IOCTL_SVE_FIMD_SET_OUTPUT_ENABLE

+BacklightPwrSrcChanged

LayMgr.cpp: Layout Manager successfullyinitialized to  2

MSIM: IM_ReadRegistry read KB 5

Exception 'Data Abort' (4): Thread-Id=04dd0006(pth=838c0354),Proc-Id=00400002(pprc=82d98308) 'NK.EXE', VM-active=049b0006(pprc=838b8ec4)'explorer.exe'

PC=c006e36c(k.coredll.dll+0x0004e36c)RA=c03224d0(cachefilt.dll+0x000024d0) SP=d411fb28, BVA=00000000

Exception 'Raised Exception' (-1): Thread-Id=04dd0006(pth=838c0354),Proc-Id=00400002(pprc=82d98308) 'NK.EXE', VM-active=049b0006(pprc=838b8ec4)'explorer.exe'

PC=c003bc08(k.coredll.dll+0x0001bc08)RA=8023a4c8(kernel.dll+0x000064c8) SP=d411f3b0, BVA=ffffffff

Exception 'Data Abort' (4): Thread-Id=04dd0006(pth=838c0354),Proc-Id=00400002(pprc=82d98308) 'NK.EXE', VM-active=049b0006(pprc=838b8ec4)'explorer.exe'

PC=c006e36c(k.coredll.dll+0x0004e36c)RA=c03224d0(cachefilt.dll+0x000024d0) SP=d411fb28, BVA=00000000

Exception 'Raised Exception' (-1): Thread-Id=04dd0006(pth=838c0354),Proc-Id=00400002(pprc=82d98308) 'NK.EXE', VM-active=049b0006(pprc=838b8ec4)'explorer.exe'

PC=c003bc08(k.coredll.dll+0x0001bc08)RA=8023a4c8(kernel.dll+0x000064c8) SP=d411f3b0, BVA=ffffffff

…..

 

2.      问题的排查

根据调试信息,发生'Data Abort'异常的地方恰好是下面的代码之间

result =bcspCommunication.OpenConnection(comPortName, flashChip ? baudrate :bootstrapBaudrate, defaultPacketSize, threadPriority, TRUE, !flashChip);

   if (result == ERROR_SUCCESS && !flashChip)

    {

       IFDBG(DebugOut(DEBUG_MANAGER_INIT,TEXT("<HciManager::ThreadExecute> Bootstraping chip")));

 

         if(GetFileAttributes(L"\\FlashDisk\\PSconfig.psr") == 0xFFFFFFFF)

         {

                   MoveFile(L"\\Windows\\PSconfig.psr", L"\\Flash Disk\\PSconfig.psr");

                   SetFileAttributes(L"\\FlashDisk\\PSconfig.psr",FILE_ATTRIBUTE_NORMAL);

         }

         result= bccmd.ConfigureChip(TEXT("\\Flash Disk\\PSconfig.psr"));

此问题的各种排查情况如下:

⑴屏蔽掉对GetFileAttributes、MoveFile和SetFileAttributes这些API的调用,异常依旧会产生。

⑵因为这里调用了GetFileAttributes、MoveFile和SetFileAttributes等API,结合异常信息,怀疑是cachefilt.dll还没有加载起来就执行了这些调用引起的,就在platform.reg下面的注册表:

[HKEY_LOCAL_MACHINE\System\StorageManager\AutoLoad\NAND\Filters\CacheFilt]

         "Dll"="cachefilt.dll"

         "LockIOBuffers"=dword:1

 

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\NAND\FATFS\Filters\CacheFilt]

         "Dll"="cachefilt.dll"

         "LockIOBuffers"=dword:1

都增加了"Order"=dword:1,确保在蓝牙驱动加载之前加载cachefilt.dll,但异常还是会出现。

⑶在platform.reg中增加下面的注册表项:

[HKEY_LOCAL_MACHINE\System\StorageManager\AutoLoad\NAND]

         "DriverPath"="Drivers\\BuiltIn\\NAND"

         "LoadFlags"=dword:1                         ; load synchronously

         "BootPhase"=dword:0

         "MountAsBootable"=dword:1                  ; for Hive-based registry

         "Flags"=dword:1000

增加之后连续刷系统55次没有发现异常,应该是解决了此问题,但是之前把Flash disk盘符不能成功映射为U盘。一个很奇怪的现象,就是把FLASH相关注册表的NAND改为NANDFLASH(包括这部分的注册表信息)就解决了刷系统启动异常问题和Flash Disk分区不能成功映射为U盘问题,如果是NAND或是FLASH就不行,现在还不知道为什么会这样,因为查找了整个BSP包,都没有说限制一定要用NANDFLASH,知道的朋友,还望分享一下。

 

3.      问题的解决

为了解决这个问题及解决过程中发现Flash disk盘符不能成功映射为U盘的问题,先把问题解决前后的注册表信息贴出来。

问题解决前:

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\NAND]

         "Prefix"="DSK"

         "Dll"="smflash.dll"

         "Order"=dword:0

         "Index"=dword:3

         "Profile"="NAND"

         "Ioctl"=dword:4

         "IClass"="{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"

         "Flags"=dword:1000

 

;[HKEY_LOCAL_MACHINE\System\StorageManager\AutoLoad\NAND]

         ;"DriverPath"="Drivers\\BuiltIn\\NAND"

         ;"LoadFlags"=dword:1                       ; load synchronously

         ;"BootPhase"=dword:0

         ;"MountAsBootable"=dword:1                 ; for Hive-based registry

         ;"Flags"=dword:1000

 

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\NAND]

         "DefaultFileSystem"="BINFS"

         "PartitionDriver"="mspart.dll"

         "Name"="MicrosoftFlash Disk"

         "AutoPart"=dword:1

         "AutoFormat"=dword:1

         "AutoMount"=dword:1

         "BootPhase"=dword:0

         "Flags"=dword:1000

         ;"Folder"="HIVE1"

 

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\NAND\BINFS]

         "MountHidden"=dword:1

         "MountAsROM"=dword:1

 

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\NAND\FATFS]

         ;"FormatExfat"=dword:1

         "FormatFAT"=dword:1

         "Flags"=dword:14                               ; deprecated inCE6.0 (0x4 : FATFS_DISABLE_AUTOSCAN, 0x10 : FATFS_ENABLE_BACKUP_FAT)

         "DisableAutoScan"=dword:1

         "CheckForFormat"=dword:1

         "EnableWriteBack"=dword:1

         "AutoFormat"=dword:1

         "MountAsRoot"=dword:1                 ; for ROM-only file system

         "MountAsBootable"=dword:1                  ; for Hive-based registry

        

[HKEY_LOCAL_MACHINE\System\StorageManager\AutoLoad\NAND\Filters\CacheFilt]

         "Dll"="cachefilt.dll"

         "LockIOBuffers"=dword:1

 

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\NAND\FATFS\Filters\CacheFilt]

         "Dll"="cachefilt.dll"

         "LockIOBuffers"=dword:1

 

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\NAND\PART01]

             "Name"="Microsoft FlashDisk1"

             "Folder"="SysDisk"

 

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\NAND\PART02]

             "Name"="Microsoft FlashDisk2"

             "Folder"="FlashDisk"

问题解决之后的注册表信息:

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\NANDFLASH]

   "Prefix"="DSK"

   "Dll"="smflash.dll"

   "Index"=dword:3

   "Order"=dword:0

   "Profile"="NANDFLASH"

   "IClass"="{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"

IF IMGHIVEREG

   "Flags"=dword:00001000

ENDIF ;IMGHIVEREG

  

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\NANDFLASH]

   "DefaultFileSystem"="BINFS"

   "PartitionDriver"="mspart.dll"

   "Name"="Microsoft Flash Disk"

 

   

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\NANDFLASH\BINFS]

   "MountHidden"=dword:1

   "MountAsROM"=dword:1

 

    

[HKEY_LOCAL_MACHINE\System\StorageManager\AutoLoad\NANDFLASH]

   "DriverPath"="Drivers\\BuiltIn\\NANDFLASH"

    ;LoadFlags 0x01 == load synchronously

   "LoadFlags"=dword:1

   "BootPhase"=dword:0

IF IMGHIVEREG

   "MountAsBootable"=dword:1

ENDIF ;IMGHIVEREG

   

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\NANDFLASH\FATFS]

   "Flags"=dword:14

         ;"Folder"="ResidentFlash"

   "FormatExfat"=dword:1

   "CheckForFormat"=dword:1

   "EnableWriteBack"=dword:1

                   "MountAsRoot"=dword:1; for ROM-only file system

  IFIMGHIVEREG

 "MountAsBootable"=dword:1 ; for Hive-based registry

 ENDIF IMGHIVEREG

 

        

[HKEY_LOCAL_MACHINE\System\StorageManager\AutoLoad\NANDFLASH\Filters\CacheFilt]

         "Dll"="cachefilt.dll"

         "LockIOBuffers"=dword:1

 

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\NANDFLASH\FATFS\Filters\CacheFilt]

         "Dll"="cachefilt.dll"

         "LockIOBuffers"=dword:1

 

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\NANDFLASH\PART01]

             "Name"="Microsoft FlashDisk1"

             "Folder"="SysDisk"

 

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\NANDFLASH\PART02]

             "Name"="Microsoft FlashDisk2"

             "Folder"="FlashDisk"

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值