//=====================================================================
//TITLE:
// 详解TCC89x的Hive Registry设置
//AUTHOR:
// norains
//DATE:
// Tuesday 16-November-2010
//Environment:
// Windows CE 6.0
// TCC8900
//=====================================================================
Hive Registry在很多方案中设置比较麻烦,有的还专门弄了个文档来一步一步讲解如何设置;但对于TCC89x来说,如果你要求不高,仅仅是能够正常让Hive Registry运作,那么一切都是很简单。
首先,我们要做的是,添加Hive Registry选项,如图:
选择该特性以后,其实只是设置了SYSGEN_FSREGHIVE这个环境变量而已。编译完毕,将系统烧录到FLASH,这时候Hive Registry已经开始正常工作了。但这时候细心的朋友测试的时候发现,为什么更改后的注册表数值重启之后就消失了,没有保存下载呢?这也能叫Hive Registry正常工作么?
很明确地说,此时Hive Registry已经正常工作了,之所以数据没有保存下来,是因为保存的路径不对。打开Platform.reg文件,发现保存路径的设置如下:
从图中可以看出,路径是在“Documents and Settings”这个文件夹,也就是说完整的路径为“/Documents and Settings”。这意味着什么?意味着我们的注册表文件保存到内存的临时空间去了!为了能在关闭设备后还能保存数据,我们只需要更改该路径到Flash中即可,如:
可能有的朋友觉得将注册表文件保存到NAND有点不专业,想保存到隐藏的APP分区,也许会按照我这篇文章《TCC89x的NAND数据分区的设置》(http://blog.csdn.net/norains/archive/2010/11/11/6002358.aspx)进行设置,并且将路径更改为“App//Documents and Settings”,但在实际运行中发现根本数据就无法保存。然后再深究原因,结果是,当选择Hive Registry时,APP分区根本就没有手动加载。怎么回事呢?其实这个我们需要在NAND注册表中添加“; HIVE BOOT SECTION”字段,如图:
编译完毕,将系统烧录,OK!一切正常!
熟悉注册表的朋友可能就疑惑了,为什么加了这两句之后,就能正常加载了呢?前面有“;”符号,不是注释么?一开始我也是这么想的,但该死的微软,给我们开了一个天大的玩笑,HIVE BOOT SECTION之前加“;”不是注释,是代表特殊的功能!众所周知,Hive Registry分为两个部分,一部分是编译时生成的包含到NK里面的,另一部分是保存到非易失媒介的,也就是类似FLASH一类。夹在“; HIVE BOOT SECTION”和“ ; END HIVE BOOT SECTION”之间的数值,标明它是要存储在非易失媒介中的。
知道这些基础知识之后,对于为什么之前的注册表在Hive Registry的情形下,没有正确加载APP分区了。首先,NAND注册表的Flags设置为1000,意味着该驱动在保存到Flash的注册表找到的话,也只按照保存的这个数值进行加载;即使是NK部分还存在该键值,也只执行一次。换句话来说,如果Flags为0,那么会执行两次。接着,因为之前的注册表没有添加“HIVE BOOT SECTION”字段,所以并没有保存到Flash的注册表中,于是启动之后,在Flash的注册表就没有找到该分区信息,所以不会进行加载。最后,又因为NAND驱动只加载一次,系统不会再执行NK里面的NAND注册表,于是APP分区就永远没有办法自动加载了。