基于uboot的2440hive注册表实现

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。 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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值