版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章
原始出处 、作者信息和本声明。否则将追究法律责任。
http://bluefish.blog.51cto.com/214870/58094
|
之前看过很多贴子是讲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中实现。 本文出自 “bluefish” 博客,请务必保留此出处http://bluefish.blog.51cto.com/214870/58094 本文出自 51CTO.COM技术博客 |
基于uboot的2440hive注册表实现
最新推荐文章于 2021-11-09 23:16:17 发布