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