詳解TCC89x的Hive Registry設(shè)置
//=====================================================================
//TITLE:
// 詳解TCC89x的Hive Registry設(shè)置
//AUTHOR:
// norains
//DATE:
// Tuesday 16-November-2010
//Environment:
// Windows CE 6.0
// TCC8900
//=====================================================================
Hive Registry在很多方案中設(shè)置比較麻煩,有的還專門弄了個文檔來一步一步講解如何設(shè)置;但對于TCC89x來說,如果你要求不高,僅僅是能夠正常讓Hive Registry運作,那么一切都是很簡單。
首先,我們要做的是,添加Hive Registry選項,如圖:
選擇該特性以后,其實只是設(shè)置了SYSGEN_FSREGHIVE這個環(huán)境變量而已。編譯完畢,將系統(tǒng)燒錄到FLASH,這時候Hive Registry已經(jīng)開始正常工作了。但這時候細(xì)心的朋友測試的時候發(fā)現(xiàn),為什么更改后的注冊表數(shù)值重啟之后就消失了,沒有保存下載呢?這也能叫Hive Registry正常工作么?
很明確地說,此時Hive Registry已經(jīng)正常工作了,之所以數(shù)據(jù)沒有保存下來,是因為保存的路徑不對。打開Platform.reg文件,發(fā)現(xiàn)保存路徑的設(shè)置如下:
從圖中可以看出,路徑是在“Documents and Settings”這個文件夾,也就是說完整的路徑為“/Documents and Settings”。這意味著什么?意味著我們的注冊表文件保存到內(nèi)存的臨時空間去了!為了能在關(guān)閉設(shè)備后還能保存數(shù)據(jù),我們只需要更改該路徑到Flash中即可,如:
可能有的朋友覺得將注冊表文件保存到NAND有點不專業(yè),想保存到隱藏的APP分區(qū),也許會按照我這篇文章《TCC89x的NAND數(shù)據(jù)分區(qū)的設(shè)置》(http://blog.csdn.net/norains/archive/2010/11/11/6002358.aspx)進(jìn)行設(shè)置,并且將路徑更改為“App//Documents and Settings”,但在實際運行中發(fā)現(xiàn)根本數(shù)據(jù)就無法保存。然后再深究原因,結(jié)果是,當(dāng)選擇Hive Registry時,APP分區(qū)根本就沒有手動加載。怎么回事呢?其實這個我們需要在NAND注冊表中添加“; HIVE BOOT SECTION”字段,如圖:
編譯完畢,將系統(tǒng)燒錄,OK!一切正常!
熟悉注冊表的朋友可能就疑惑了,為什么加了這兩句之后,就能正常加載了呢?前面有“;”符號,不是注釋么?一開始我也是這么想的,但該死的微軟,給我們開了一個天大的玩笑,HIVE BOOT SECTION之前加“;”不是注釋,是代表特殊的功能!眾所周知,Hive Registry分為兩個部分,一部分是編譯時生成的包含到NK里面的,另一部分是保存到非易失媒介的,也就是類似FLASH一類。夾在“; HIVE BOOT SECTION”和“ ; END HIVE BOOT SECTION”之間的數(shù)值,標(biāo)明它是要存儲在非易失媒介中的。
知道這些基礎(chǔ)知識之后,對于為什么之前的注冊表在Hive Registry的情形下,沒有正確加載APP分區(qū)了。首先,NAND注冊表的Flags設(shè)置為1000,意味著該驅(qū)動在保存到Flash的注冊表找到的話,也只按照保存的這個數(shù)值進(jìn)行加載;即使是NK部分還存在該鍵值,也只執(zhí)行一次。換句話來說,如果Flags為0,那么會執(zhí)行兩次。接著,因為之前的注冊表沒有添加“HIVE BOOT SECTION”字段,所以并沒有保存到Flash的注冊表中,于是啟動之后,在Flash的注冊表就沒有找到該分區(qū)信息,所以不會進(jìn)行加載。最后,又因為NAND驅(qū)動只加載一次,系統(tǒng)不會再執(zhí)行NK里面的NAND注冊表,于是APP分區(qū)就永遠(yuǎn)沒有辦法自動加載了。