当前位置: 代码迷 >> WinCE >> WINCE6.0的NandFlash分区挂载有关问题
  详细解决方案

WINCE6.0的NandFlash分区挂载有关问题

热度:276   发布时间:2016-04-28 13:48:30.0
WINCE6.0的NandFlash分区挂载问题
环境:Uboot + Eboot + Wince 6.0,S3C6410 CPU,Samsung K9G8G08 1G Bytes NandFlash。
现象:
1、EBoot下载nk.bin文件后第一次启动wince,控制面板-->存储管理器中可以看到
  part00、*part01两个分区,part00为BINFS格式,类型:0x21,part01为ExFat
  (FAT)格式,类型:0x0B。
  其中part01带*号,表示已经挂载上,我的设备中可以看到NandFlash的文件夹,
  可以正常拷贝、读写文件,part01的标志为0x00000010
2、关机后重新启动,Eboot使用已经存在的image启动,进入wince后发现NandFlash文件夹
  消失了,在存储管理器中可以看到part00和part01两个分区,但part01没有加*号了,
  并且flags的标志变为0x00000000。
3、以后再次断电重启,情况都与2相同。part01分区也不能手工格式化和挂载。

4、研究Eboot代码发现,第一次下载nk.nb0时调用了nand.cpp中的WriteOSImageToBootMedia()函数,
该函数中有如下2个调用,分别创建了binfs和fat分区:
创建BINFS分区:
hPart = BP_OpenPartition( (IMAGE_START_BLOCK+1)*PAGES_PER_BLOCK, // next block of MBR
(SECTOR_TO_BLOCK_SIZE(FILE_TO_SECTOR_SIZE(dwBINFSPartLength))+1)*PAGES_PER_BLOCK, // align to block
  PART_BINFS,
  TRUE,
  PART_OPEN_ALWAYS);
创建FAT分区:
  hPartEx = BP_OpenPartition( NEXT_FREE_LOC,
  USE_REMAINING_SPACE,
  PART_DOS32,
  FALSE,
  PART_OPEN_ALWAYS);
根据启动时串口输出信息,启动时以上两个分区都不存在,因此都重新创建了。

以后启动时调用了ReadOSImageFromBootMedia()函数,该函数调用了如下函数:
  hPart = BP_OpenPartition( NEXT_FREE_LOC,
  USE_REMAINING_SPACE,
  PART_BINFS,
  TRUE,
  PART_OPEN_EXISTING);
根据启动时串口输出信息,再次打开时binfs分区是存在的。

5、尝试了多种方法,比如改注册表,修改第2个BP_OpenPartition函数的的第4个参数为FALSE,都没有成功。
现在注册表的相关信息如下:
;-------------- NAND Flash Block Device Driver ----------------------------------
; HIVE BOOT SECTION
IF BSP_NONANDFS !

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\NANDFLASH]
"Prefix"="DSK"
"Dll"="nandflash.dll"
"Index"=dword:1
"Order"=dword:0
"Profile"="NANDFLASH"
"IClass"="{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
IF IMGHIVEREG
"Flags"=dword:1000
ENDIF IMGHIVEREG

[HKEY_LOCAL_MACHINE\System\StorageManager\AutoLoad\NANDFLASH]
"DriverPath"="Drivers\\BuiltIn\\NANDFLASH"
"LoadFlags"=dword:1 ; load synchronously
"BootPhase"=dword:0
IF IMGHIVEREG
"MountAsBootable"=dword:1 ; for Hive-based registry
ENDIF IMGHIVEREG

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\NANDFLASH]
"DefaultFileSystem"="BINFS"
"PartitionDriver"="mspart.dll"
"Name"="Microsoft Flash Disk"
"AutoPart"=dword:1
  "AutoMount"=dword:1
  "AutoFormat"=dword:1


[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\NANDFLASH\BINFS]
"MountHidden"=dword:1
"MountAsROM"=dword:1

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\NANDFLASH\FATFS]
"FormatExfat"=dword:1
"Flags"=dword:14 ; deprecated in CE6.0 (0x4 : FATFS_DISABLE_AUTOSCAN, 0x10 : FATFS_ENABLE_BACKUP_FAT)
"DisableAutoScan"=dword:1
"CheckForFormat"=dword:1
"EnableWriteBack"=dword:1
"AutoPart"=dword:1
  "AutoMount"=dword:1
  "AutoFormat"=dword:1
"Folder"="NandFlash"
"MountAsRoot"=dword:1 ; for ROM-only file system
IF IMGHIVEREG
"MountAsBootable"=dword:1 ; for Hive-based registry
ENDIF IMGHIVEREG

[HKEY_LOCAL_MACHINE\System\StorageManager\AutoLoad\NANDFLASH\Filters\CacheFilt]
  相关解决方案