Windows Embedded CE嵌入式操作系統支持兩種不同的注冊表類型:RAM-based注冊表和Hive-based注冊表。
RAM-based注冊表將所有注冊表信息保存在對象存儲(object store)中,對象存儲可以看作是WinCE系統在內存中永久的虛擬RAM磁盤,因此要保存注冊表信息,需要把注冊表轉存到具有掉電保護的RAM介質中,為此CE提供了轉存及恢復注冊表的底層函數。如果沒有對注冊表進行這樣的轉存及恢復,則系統總是使用缺省的注冊表。
Hive-based注冊表將注冊表數據存儲為文件,注冊表文件可以存儲在任何文件系統中。將注冊表存儲在非易失的存儲介質上(比如Flash),就不需要類似RAM-based注冊表的備份與恢復操作。
RAM-based注冊表通常用在總是使用熱啟動,很少甚至從不冷啟動的系統中,Windows Embedded CE6.0及以后版本,默認采用Hive-based注冊表,英創公司的WinCE系列工控主板默認使用Hive-based注冊表,注冊表文件存儲在NandFlash中。
WinCE在系統啟動過程中會在注冊表里添加信息,最典型的就是在注冊表中生成驅動的Active 項,如果是Hive-based注冊表,則意味著WinCE在整個啟動過程中會不停寫盤,在大多數情況下這沒有任何問題,但如果系統使用環境供電不穩定,在系統啟動過程中頻繁斷電,則有可能導致注冊表損壞。而對RAM-based注冊表,每次系統啟動時都會將內核中的默認注冊表加載到RAM中,系統啟動過種中生成的注冊表信息也寫在RAM中,因此不會有注冊表被寫壞的問題。所以從啟動的可靠性來看,RAM-based的注冊表方式優于Hive-based注冊表方式。
為了提高主板的可靠性,我們在BSP中增加了支持RAM-based注冊表的底層轉存及恢復功能。所設計的轉存及恢復功能,主要是針對那些在實際的應用中,必須保存的相關信息。比如觸摸屏較準參數,網絡參數等。為此我們對內核進行了更新,新的內核在采用RAM-based注冊表同時,也能保存一些必要的注冊表數據。
英創WinCE RAM-based注冊表版本內核目前能保存以下注冊表信息:
注冊表功能 | 注冊表 | |
1 | 觸摸屏校準參數 |
[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\TOUCH] 'CalibrationData'='' |
2 | 網絡1參數 |
[HKEY_LOCAL_MACHINE\Comm\ENET1\Parms\TcpIp] 'EnableDHCP'=dword:0 'UseZeroBroadcast'=dword:0 'DefaultGateway'='192.168.201.19' 'IpAddress'='192.168.201.213' 'Subnetmask'='255.255.255.0' 'DNS'='61.139.2.69' |
3 | 網絡2參數 |
[HKEY_LOCAL_MACHINE\Comm\ENET2\Parms\TcpIp] 'EnableDHCP'=dword:0 'UseZeroBroadcast'=dword:0 'DefaultGateway'='192.168.201.19' 'IpAddress'='192.168.201.213' 'Subnetmask'='255.255.255.0' 'DNS'='61.139.2.69' |
3 | 系統語言設置 |
[HKEY_LOCAL_MACHINE\MUI] 'SysLang'=dword:804 [HKEY_LOCAL_MACHINE\MUI] 'DefaultLCID'=dword:804 [HKEY_CURRENT_USER\MUI] 'CurLang'=dword:804 |
表1
使用RAM-based注冊表時,無論是由控制面板、遠程注冊表工具或通過程序代碼直接修改了上面例出的注冊表項后,都需要調用RegFlushKey函數才能真正保存注冊表信息。下面是示例代碼:
HKEY hOpenKey;
// 打開任意注冊表鍵
RegOpenKeyEx (HKEY_LOCAL_MACHINE, L'HARDWARE\\DEVICEMAP\\TOUCH', 0, 0, &hOpenKey);
// 調用RegFlushKey會觸發系統保存注冊表
RegFlushKey( hOpenKey );
// 關閉打開的注冊表
RegCloseKey( hOpenKey);
我們將上面代碼封裝成了一個小工具RegFlushKey,放在系統的控制面板中,方便調試時使用。比如用戶通過控制面板的筆針工具較準完觸摸屏后,再點擊運行一次RegFlushKey,觸摸屏較準數據就保存了。
圖1
根據用戶實際需求,我們會不斷添加保存的注冊表項,本文檔表1也會同步更新。
與hive-based注冊表相比,使用RAM-based注冊表還有些需要注意的地方,比如“撥號連接”。在hive注冊表的系統中,通過控制面板或英創提供的RasEntry程序新建撥號連接后,對應的注冊表就已經自動保存了,系統斷電重啟不會丟失,因此在hive注冊表情況下,撥號連接只需要建立一次。而RAM-based注冊表不能保存這些信息,所以系統每次啟動后都需要新建撥號連接。
-
WINDOWS
+關注
關注
3文章
3541瀏覽量
88635 -
嵌入式主板
+關注
關注
7文章
6085瀏覽量
35303
發布評論請先 登錄
相關推薦
評論