S3C2410基于nandflash 的Hive-base…

本文介绍在S3C2410平台上基于NAND Flash实现Hive-based Registry的方法,包括配置Platform Builder、添加FAT文件系统支持及注册表项调整等步骤。

S3C2410基于nandflash Hive-basedRegistry的实现


Target Board: GEC2410 ( 64MRAM   64MNandflash)

IDE: Platform Builder5.0

WinCE下面就两种注册表,一种是RAM-based Registry,另外就是Hive-basedRegistry了,缺省用的是前者.既然是RAMbased那么所有的改动都会在断电后蒸发掉。如果想永久保存该怎么办呢,其实再笨你也能想出来,保存到磁盘上不就OK了吗!?对,但是你想如果你把注册表全放到磁盘(SDMMCHDDFlash)上WinCE怎么在没有加载你磁盘的驱动的情况下读到注册表呢?而一般情况加载磁盘的驱动程序也是要注册表的支持啊!HIVE想到了这些,看它怎么做,它把注册表分成两部分(其实是三部分,当时大体还是两步分,把user.hvsystem.hv 做一部分),第一部分就是叫做boot.hv的注册表,里面的东西就是一些在没有拿到保存在磁盘的注册表之前引导时需要的一些设置,这部分的注册表和RAMbased的是一样的,改了之后断电就没了,所以这部分的注册表项都是不需要改动的,需要改动的都放到第二部分就是了,这第二部分就是system.hvuser.hv了,也就是一直提到的要放到磁盘上的注册表. 编译的时候PB会根据platform.regCommon.reg中的标签判断哪些表项放到boot.hv中,这个标签就是;HIVE BOOT SECTION ;END BOOTSECTION,夹在这个标签之间的表项PB在编译的时候会把它们塞到boot.hv中去,其他的内容会分别塞到default.hvuser.hv中去,最后 会把这三个hv文件统统塞到XIPKERNEL中去,这样WinCE在引导的第一阶段就把所有的hv扔到RAM中去了,然后打开boot.hv拿到必要的资料,这其中包括如何加载放置system.hv的磁盘的驱动,所以那些和加载这个磁盘相关的驱动要统统放到boot.hv中,比如FAT文件系统驱动, mspart分区驱动等等,这里有一点很重要就是假如你用binfs而且device.exeNK.bin中,那么一定在第一阶段要保证binfs可用,否则这里就不可能为system.hv创造条件了。WinCE第一次启动时候磁盘上没有东东,这个时候WinCE会将内存中的default.hvuser.hv复制到注册表BootVars指定的地方,default.hv往往会被重命名为system.hv,第二次启动会先检查磁盘上的hv是不是和内存中的一致,不一致就加载磁盘上的表项。整个过程就是这样子,但要注意一点,HIVE注册表也是在内存中运行的,不同的是启动的时候会从磁盘上去读改动的表项,因为这样才能保证速度,所以你做的的注册表改动也是在内存中做的,这个时候如果你不掉用FlushRegister去将内存中的数值保存到磁盘上那么这些改动还是会丢失的。两种方法来避免丢失,一种是认为去调用FlushRegister,令一种就设置一个flagWinCE在每次改动注册表后自动 Flush.

以上说明摘自:http://dev.youkuaiyun.com/author/fredzeng/c8af2703f82c4e99b00c42f55c898d3a.html

下面说一下我是怎么具体实现的。

1, PBCatalogHive-based Registry拖进去(Hive-basedRegistry的具体位置不用说了吧!)。当然 Binary Rom Image FileSystem也要拖进去(默认的情况下已经有了)

2, Storage Manager 下的FAT File System拖进去。因为是基于nandflash的,所以要FAT支持。

3, 打开platform.reg ,找到

;HIVE BOOTSECTION

…………………………

;END BOOTSECTION

这一段,把下面的代码替换掉这一段(这一段的我也看不懂,呵呵。摘自:http://www.embedu.cn/redirect.php?fid=30&tid=3401&goto=nextnewset

; @CESYSGEN IFFILESYS_FSREGHIVE

; HIVE BOOTSECTION

; Valid Bits forFlags registry value

; If no flags areset, the hive will be stored in the object store.

;

;0x00000001   Start storage manager in boot phase 1 for hive-basedregistry

;0x00000002   Start device manager in boot phase 1 for hive-basedregistry

;0x00000004   Start storage manager in boot phase 1 for registry in

             external ROM (such as BINFS)

;0x00000008   Start device manager in boot phase 1 for registry in

             external ROM (such as BINFS)

[HKEY_LOCAL_MACHINE\init\BootVars]

  "SystemHive"="system.hv"

 "DefaultUser"="default"

  "Flags"=dword:3

 "RegistryFlags"=dword:1

 

[HKEY_LOCAL_MACHINE\System\StorageManager\AutoLoad\FlashDrv]

"DriverPath"="Drivers\\BuiltIn\\FlashDrv"

"LoadFlags"=dword:1

"BootPhase"=dword:0

"Flags"=dword:1000

 

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\FlashDrv]

"Prefix"="DSK"

"Dll"="FLASHDRV.dll"

"Order"=dword:0

"Ioctl"=dword:4

"Profile"="FlashDrv"

"FriendlyName"="MSFlash Driver"

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

; Bind BINFS tothe block driver

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\FlashDrv]

"DefaultFileSystem"="FATFS"

"PartitionDriver"="mspart.dll"

"AutoMount"=dword:1

"AutoPart"=dword:1

"AutoFormat"=dword:1

"MountAsBootable"=dword:1

"Flags"=dword:1000

"Folder"="ResidentFlash"

"Name"="MicrosoftFlash Disk"

"BootPhase"=dword:0

; Keep FATFS fromtrying to shadow \Windows

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

 "Flags"=dword:00000024

"EnableCacheWarm"=dword:0

[HKEY_LOCAL_MACHINE\System\StorageManager\FATFS]

"FriendlyName"="FAT FileSystem"

"Dll"="fatfsd.dll"

"Flags"=dword:00000064

"Paging"=dword:1

"EnableCache"=dword:1

"CacheSize"=dword:0

IF TODO

[HKEY_LOCAL_MACHINE\System\StorageManager\AutoLoad\Relfsd]

"Dll"="relfsd.dll"

"Paging"=dword:0

"LoadFlags"=dword:1

ENDIFTODO

; END HIVE BOOTSECTION

; @CESYSGEN ENDIFFILESYS_FSREGHIVE

4, 接下来重新build一次

5, 最后烧进板子里运行。你会发现在“MyDevice”下多了一个象硬盘图标的区-“Residentflash.在这里你可以永久保存你的资料。别妄想能放一部电影进去,空间有限,也就是2M左右的空间。

总结:在nandflash上开辟一个区出来,用来保存注册表和用户的数据。就想PC挂一个硬盘上去。具体怎么开辟这个区,刚才修改的那段注册表就是命令NK怎么做了,自动开辟了。

 如果有什么说得不对的地方,敬请指出,共同学习。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值