WinCE中的RAM-Based Registry与HIVE-Based Registry

在WinCE中支持两种类型的注册表:RAM-Based和HIVE-Based,默认情况下使用的是RAM-Based注册表。 1.RAM-Based注册表

  RAM-Based的注册表是将所有的注册表数据存储在对象存储(object store)中,也就是存放在RAM里面。一般用在有电池备份RAM的系统上面,也就是说,当系统掉电以后,会自动切换成电池供电,此时RAM还有供电,所以上面的数据不会丢失,这样采用RAM-Based注册表非常有效。

  RAM-Based注册表多用于经常热启动(Warm Boot)的设备上面,很少用在冷启动(Cold Boot)设备上面。

  2.HIVE-Based注册表

  HIVE-Based的注册表是将注册表数据存成文件,也就是存在掉电不会丢失数据的磁盘上面,HIVE注册表被分成两部分:系统Hive和用户Hive,也就是system.hv和user.hv。在一个多用户系统中,会包含多个用户Hive,不同的用户Hive(user.hv)会在该用户登陆的时候被加载,被注销的时候卸载。

  实际上HIVE-Based的注册表包含三个部分,我称之为引导Hive,系统Hive和用户Hive,也就是Boot.hv,system.hv和user.hv。Boot.hv主要用于系统引导时候所需的注册表设置,这部分设置不会被保存在磁盘上面,也就是说,在系统掉电以后就会丢失。实际上,这部分应该说是属于RAM-Based注册表,由于这部分数据不需要改动,所以也就无所谓了。System.hv存放关于系统的注册表设置,user.hv存放和用户相关的注册表设置。

  一般在我们编译WinCE系统的时候,Platform Builder会根据platform.reg文件中的注释标签来判断哪些注册表设置放入boot.hv中,凡是在注释标签”;HIVE BOOT SECTON”和”;END HIVE BOOT SECTION”之间的设置都会被放入boot.hv中,其他的都会放到default.hv和user.hv中。

在WinCE第一次引导的时候,所有的.hv都会被放到RAM中,WinCE系统会首先读取boot.hv进行相关引导时候的设置,然后把default.hv和user.hv放到磁盘的指定路径下面,这个路径也是在注册表中设置的,然后default.hv会被重命名为system.hv。当系统第二次启动的时候,会比较磁盘上的.hv和内存中的.hv是否一致,如果不一致,会拷贝磁盘上面的.hv到内存中。

 

  我们可以看出,实际上HIVE注册表在运行的时候也是放在RAM中的,这样速度比较快。启动的时候会从磁盘上读出,在用户更改注册表以后,会被保存在磁盘上,保存的时机也是可以设置的,可以选择在用户更改后立刻保存到磁盘上,也可以选择在reboot的时候保存。

  3HIVE-Based注册表实现

  (1) 添加HIVE-Based注册表项

  在系统中支持HIVE-Based注册表要在”Catalog Item View”中选择”Core OS”->”CEBASE”->”File System and Data Store”->”Registry Storage”->”Hive-based registry”,如图:

WinCE中的RAM-Based Registry与HIVE-Based Registry

  (2) 添加HIVE注释标签

  然后需要添加相应的注册表设置,一般我们会在platform.reg中添加HIVE相关的设置,首先需要添加的是HIVE注释标签,如下:

  ;HIVE BOOT SECTION

  …

  <your registry setting>

  …

  ;END BOOT SECTION

  所有与HIVE有关的注册表设置包括HIVE存放的磁盘的驱动的相关设置都要放在HIVE注释标签内。

  (3) 设置注册表存放的位置:

  下面通过一个例子来说明如何设置system.hv和user.hv存放的位置

[HKEY_LOCAL_MACHINEinitBootVars]

           "SystemHive"="NandFlashsystem.hv"
           "ProfileDir"="NandFlashuser.hv"
           "Flags"=dword:1
           "RegistryFlags"=dword:1 

  “SystemHive”用来设置system.hv存放的位置,这里存放在NandFlash磁盘的根目录下面。

  “ProfileDir”用来设置user.hv存放的位置,这里存放在NandFlash磁盘的根目录下面。

  “Flags”用来设置是否立刻启动Device Manager,主要是为了启动Hive-Based所需的存储设备。

  “RegistryFlags”用来设置什么时候将新的注册表设置写入磁盘,这里表示立刻写入。

  (4) 修改磁盘设备驱动的配置

  为相关的磁盘驱动添加支持Hive的设置,如下:

[HKEY_LOCAL_MACHINEDriversBuiltInNANDFlash]
          "Flags"=dword:1000

  由于Hive注册表会被保存在NandFlash中,所以将”Flags”的设置添加到了NandFlash设备驱动的注册表设置中。上面的设置只有在使用HIVE-Based注册表的时候需要,如果不是用Hive注册表,需要注释掉。

  (5) 添加Storage Manager的相关配置

  具体添加如下:

[HKEY_LOCAL_MACHINESystemStorageManagerProfiles<ProfileName><FileSystemName>]
          "MountBootable"=dword:1

  同样,在使用HIVE注册表的时候需要上述设置,如果不是使用HIVE注册表,则注释掉就可以了。

下面是我曾经基于NandFlash支持Hive注册表的设置,仅供参考:

; HIVE BOOT SECTION
[HKEY_LOCAL_MACHINEinitBootVars]
"SystemHive"="NANDFlashsystem.hv"  ;unmask this line to use flash
"ProfileDir"="NANDFlashusr.hv"
"Start DevMgr"=dword:1
"DefaultUser"="default"
"Flags"=dword:1
"RegistryFlags"=dword:1
[HKEY_LOCAL_MACHINESystemStorageManagerAutoLoadNSFlash]
"DriverPath"="DriversBuiltInNANDFlash"
"LoadFlags"=dword:1 "Order"=dword:0
[HKEY_LOCAL_MACHINEDriversBuiltInNANDFlash]
"Dll"="ep94xxnandflash.dll"
"Prefix"="DSK" "Order"=dword:0
;"Ioctl"=dword:4
"Profile"="NSFlash"
"IClass"="{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
"Flags"=dword:1000 ;unmask this line when enable HIVE
;"MemBase"=dword:00000000   
;"MemLen"=dword:00000000
; Override names in default profile
[HKEY_LOCAL_MACHINESystemStorageManagerProfilesNSFlash]
"Name"="Ep94xx NAND Flash"
"Folder"="NANDFlash"
"PartitionDriver"="MSPart.dll"
"AutoMount"=dword:1
"AutoPart"=dword:1
"AutoFormat"=dword:1
"MountFlags"=dword:2 ;unmask this line when enable HIVE
[HKEY_LOCAL_MACHINESystemStorageManagerProfilesNSFlashFATFS]
"MountFlags"=dword:2 ;unmask this line when enable HIVE
"EnableCache"=dword:1
"CacheSize"=dword:1000
"MountBootable"=dword:1
"Flags"=dword:00000024
;"Flags"=dword:00680024
;"FormatTfat"=dword:1
"CheckForFormat"=dword:1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值