之前看过很多贴子是讲hive注册表的,多少也有所了解。但是真正自己来做的时候却也碰到了不少问题。其实单独hive的实现很简单,毕竟有含量的东西ms都做好了,你所能做的就是进行配置。怎么配置不用多说了,说几个注意点:
1."MountFlags"=dword:2要放在[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\xxxx\FATFS]下
2.[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\xxxxx]下要有"DefaultFileSystem"="FATFS"当然除非你不想用fatfs
3.BINFS视自己的要求而定
4."Flags"=dword:1000不用什么地方都要加的,有.dll文件出现的子键下最好还是加
5.[HKEY_LOCAL_MACHINE\init\BootVars]下要有"Start DevMgr"=dword:1 和 "RegistryFlags"=dword:1
6.多文件系统时,注意flash的分区
      我用的是uboot,它起来的时候就是将整个flash看成一个分区。而在系统起来的时候要去加载fatfs(下面是引用一位牛人的帖子):因为没有使用eboot(一般eboot中都有对flash进行分区),所以CE跑起来找不到MBR,找不到FAT分区的起始sector,所以它从头开始查找第一个非坏块,(如果没有被格式化)开始格式化,写入MBR,DBR,BPB。所以只要把存储NK.BIN的空间置成坏块就可以了。eboot只是写入了MBR,没有写DBR,和BPB等信息。编译fmd驱动的时候,会连接一个fal.lib库,而该库就是文件系统抽象层,看不到源码,我们可以看smflash.map知道它里面有那些函数,系统在起来的时候,filesys.exe会加载smflash.dll,调用DSK_Init()->FMD_Init(),会调FMD_GetInfo得到FLASH芯片信息,然后会去mount文件系统,首先从头开始找(nandflash驱动中的FMD_GetBlockStatus),第一个非坏块,因为我们知道我们的eboot,要把NK的存储空间保留成坏块,这样是防止系统运行起来的把它们给格式化了,第一个非坏块的第一个sector就是存储MBR的信息。这时如果设置了autoformat,就对其进行格式化,这样它里面有PARTENTRY的信息,得到这个再跟据注册表里的指定的mount文件系统,如果是FATFS,并且在FAT分区中没有找到有效的DBR,BPB信息sector之后,会调用fatutil.dll中的格式化功能进行格式化,这时才真正写入DBR,BPB等信息。
      文件系统的加载程序在private\winceos\coreos\storage\storemgr下。具体的mount是在store.cpp中的CStore::MountStore中实现。