摘要:本文首先講述了Windows CE系統資料庫的重要性,它對整個嵌入式系統的正常運作起着關鍵性作用。然後又介紹了兩種系統資料庫存儲方式,并着重講述了基于HIVE的系統資料庫。詳細闡述了基于HIVE的系統資料庫的儲存資料方式及實作HIVE系統資料庫的方法。最後給出了系統成功修改系統資料庫的實作方法。本文的研究對其它作業系統的系統資料庫修改也具有着借鑒意義。
關鍵詞:Windows CE;系統資料庫;HIVE;資訊存儲
0 引言
嵌入式作業系統Windows CE和桌面作業系統一樣使用系統資料庫(Registry)來儲存應用程式、驅動程式和使用者的設定以及其他一些配置資訊,通常還存儲着作業系統調用程式的狀态資訊,是以系統資料庫起着非常重要的作用,它是Windows CE作業系統的核心。在沒有系統資料庫的情況下,作業系統将不能獲得必需的資訊來運作和控制附屬的裝置和應用程式及正确響應使用者的輸入[1][2]。
1 Windows CE系統資料庫簡介
Windows CE的系統資料庫結構和其他版本的Windows作業系統的系統資料庫結構是類似的。系統資料庫是一個包括主關鍵字子樹的集合,它和檔案目錄樹一樣具有層次結構。每個子樹又由更低層的子樹、鍵以及鍵值組成。鍵相當于檔案系統的目錄,每個鍵包含若幹鍵值項。而鍵值項相當于檔案系統末端的檔案,它由鍵值名、資料類型和鍵值組成。鍵值就是系統資料庫存儲的資料。
Windows CE對系統資料庫的值有一些限制:鍵或者鍵值項的名字最多為255個字元,資料最大為4K,鍵嵌套層次最多為16層。是以在使用系統資料庫程式設計時,要盡量使鍵和鍵值項占用最小的空間。另外,需要注意的是,在系統資料庫中,鍵值項比鍵值占用更大的存儲空間。
Windows CE系統資料庫包括4個根鍵[2],如表1所示。
根鍵名 | 鍵值内容 |
HKEY_LOCAL_MACHINE | 硬體及驅動程式配置資料 |
HKEY_CURRENT_USER | 使用者配置資料 |
HKEY_CLASSES_ROOT | OLE和檔案類型比對配置資料 |
HKEY_USERS | 适用于所有使用者的存儲資料 |
表1 Windows CE系統資料庫根鍵
Table1 The root key of Windows CE register
2 Windows CE系統資料庫類型
由于嵌入式系統的特點,一些嵌入式裝置是沒有外存的。是以Windows CE的系統資料庫提供了兩種實作方式:基于對象存儲的系統資料庫(RAM-Based Registry)和基于Hive的系統資料庫(Hive-Based Registry)[3]。我們可以在Windows CE中使用任何一種系統資料庫,系統資料庫類型對于使用者和應用程式來說都是透明的。基于RAM的系統資料庫在經常熱啟動的裝置上是非常高效的,而在經常冷啟動的裝置上,性能卻很令人失望,最适合有電池後備的個人電子消費類産品。對于經常冷啟動或者不怎麼使用熱啟動方式的裝置來說,基于hive的系統資料庫是非常高效的,最适合永久性的存儲器和多使用者環境下使用。
2.1 基于RAM的系統資料庫
顧名思義,基于RAM的系統資料庫把整個系統資料庫作為一個對象存儲堆放在RAM中。這就意味着如果系統中斷對RAM的電池供電,對系統資料庫的所有改動都會丢失。也就是說,它們的有效性和RAM中資料的有效性是一緻的。但是使用RAM系統資料庫,對系統資料庫的讀寫通路操作非常的快速高效。在舊版本的Windows CE中,大量應用了基于RAM的系統資料庫。如果有外存且需要經常冷啟動的裝置采用基于RAM的系統資料庫,則需要在系統斷電的時候對系統資料庫進行儲存,等系統再次啟動時對儲存的系統資料庫進行還原。
2.2 基于HIVE的系統資料庫
HIVE系統包含了不屬于任何使用者資訊的系統設定。HIVE系統由OEM層調用。通常hive檔案為System.hv,但是它的存儲位置可能随着平台而變化。這種存儲方式使系統在斷電前後無須備份和恢複系統資料庫資料,這使得系統冷啟動時速度更快。
基于HIVE結構的系統資料庫被分為兩部分存儲:系統HIVE,存儲所有的系統資料;使用者HIVE,存儲對特定使用者的所有相關資料。一個多使用者系統将包括幾個使用者HIVE。當一個使用者登入時,相應的使用者HIVE就會被激活,當使用者退出時,相應的使用者HIVE也會被撤銷。所有的使用者HIVE都用USER.hv來命名,并且被放在不同的使用者目錄中,每個目錄都是以它屬于的使用者的使用者名來命名的。
系統資料庫中的HKEY_LOCAL_MACHINE/init/BootVars下的鍵值項ProfileDir存儲着所有使用者目錄的位置。HKEY_LOCAL_MACHINE/init/BootVars下的鍵值項SystemHive存儲着系統HIVE的檔案路徑和檔案名。
BOOT HIVE存儲隻用于系統啟動時的系統設定。BOOT HIVE從ROM中讀出并用于啟動驅動程式和相關的檔案系統。這個檔案系統用于啟動系統HIVE檔案。當系統HIVE啟動後,BOOT HIVE将被終止。當系統HIVE有效時,啟動過程中被修改的系統資料庫資料将被存放于系統HIVE中。但是BOOT HIVE在ROM中的資料還保持不變。
3 HIVE系統資料庫的實作
HIVE系統資料庫是通過修改系統的平台檔案來實作的,在工程目錄下的PLATFORM.REG檔案中包含了系統的啟動資訊,HIVE系統資料庫的啟動方式不同于普通系統資料庫的啟動方式,它需要在系統加載裝置管理器前加載系統存儲媒介的驅動程式,隻有這樣才能在加載裝置管理器當中提取裝置在系統資料庫中的儲存資訊,達到HIVE存儲的目的。下面介紹如何讓系統支援HIVE
系統資料庫中的HIVE | 檔案 | 描述 |
BOOT HIVE | BOOT.hv存于ROM中 | 包括所有 HKEY_LOCAL_MACHINE HKEY_CLASSES_ROOT HKEY_USERS下的資料,隻是在啟動時使用。啟動後對它的修改将影響系統HIVE |
SYSTEM HIVE | OEM-dependen | 包括所有 HKEY_LOCAL_MACHINE HKEY_CLASSES_ROOT HKEY_USERS下的資料,包括對每個使用者都一樣的裝置的設定 |
USER HIVE | USER.hv | 包括所有HKEY_CURRENT_USER下的資料,包含使用者定義的設定。每個使用者具有不同的HIVE,當使用者登入時會啟動它,當退出時,會将它關閉 |
表2 标準HIVE及其支援的檔案
Table2 Standard HIVE and support type
系統資料庫存儲:
1)修改裝置管理器的啟動資訊值
“Start DevMgr”= dword:1
此冊項代表使用HIVE系統資料庫存儲系統資訊
2)把系統的存儲媒介驅動程式加在
“HIVE BOOT SECTION”與“END HIVE BOOT SECTION”
的注釋之間,該注釋被編譯器選擇提取之後,在系統上電後加載在裝置管理器之前
3)在系統的存儲媒介驅動程式上提供一個FLAG項,該項的目的是對目标資料進行邏輯運算。
“flags”= dword:1
通過以上參數的修改,系統即可支援HIVE系統資料庫存儲,該存儲方式有效存儲系統儲存在HIVE系統資料庫中的資訊,比如觸摸屏觸電校驗資訊,系統IP位址等。經大量試驗證明,該方法有效可行。
4 系統系統資料庫修改分析
4.1 觸摸屏驅動程式系統資料庫設定
下面是本多媒體系統觸摸屏驅動程式的系統資料庫資訊設定,我們在校準的時候需要在系統資料庫中存儲一些校準坐标資訊:
[HKEY_LOCAL_MACHINE/ControlPanel]
"InputConfig"= dword:3 ;3 =>鍵盤和觸摸屏
[HKEY_LOCAL_MACHINE/HARDWARE/DEVICEMAP/TOUCH]
"DriverName"="touch:dll"
"MaxCalError"=dword:10
"CalibrationData"="500,512 762,268 758,760 244,758 241,266 "//校準資訊
Landscape
"CalibrationData"="515,503 763,748 258,749 269,255 764,255 "
圖1 HIVE系統資料庫需要修改的檔案
Fig.1 The file wants modified if HIVE register needs
4.2 在映像中固定IP位址
在我們自己建立的調試環境中每次啟動後都需要手動修改IP後才能多人同時調試,是以要想将IP位址固定下來就要關系到系統資料庫的修改。而關于IP位址的更改一定會反映到系統系統資料庫中,也就是說如果能将這部分更改在定制作業系統的時候就加進去,那麼當映像啟動後,就具有設定好的IP位址了[4]。
經過不斷摸索,得出的結論很好,修改平台檔案project.reg,在檔案中添加以下内容:
[HKEY_LOCAL_MACHINE/comm/vmini1/parms/tcpip]
"defaultgateway" = multi_sz:"192.168.0.1"
"subnetmask" = multi_sz:"255.255.255.0"
"IpAddress" = multi_sz:"192.168.0.5"
"enabledhcp" = dword:0
第一個是預設網關,第二個是子網路遮罩,第三個是IP位址,最後一個也必須加,就是禁用DHCP,隻有這樣自己的設定才能生效。
注意:系統資料庫鍵值類型一定要設定好,像上面的multi_sz,dword一定要添加在前面,否則仍然沒有效果。
4.3 SD卡驅動系統資料庫資訊
SD卡是車載多媒體系統的重要外圍儲存設備,為靈活實作SD卡熱插拔功能,使用流接口驅動模型。SD卡驅動程式以及它所使用的檔案系統都是由存儲管理器負責的。在存儲管理器的啟動過程中,很多配置資訊都是從系統的系統資料庫得到的。是以必須先建立如下SD卡系統資料庫資訊:
[HKEY_LOCAL_MACHINE/Drivers/BuiltIn/sdcard]
"D11"="sdcard.d11"
"Prefix"="SDC"
"Index"=dword:1
"Order"=dword:l
"FSD"="fatfs.d11"
[HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/SDCARD]
"Name"="SD Card"
"Folder"= "SDCARD Storage"
5 結論
系統資料庫是Windows CE作業系統的核心,起着至關重要的作用,車載多媒體系統的所有驅動程式和應用程式的配置資訊都被儲存在系統資料庫中,如果修改或加載不當,都将使得整個系統的一些功能不能正常使用,甚至将會導緻Windows CE作業系統無法啟動。本文的創新點在于提出了一種實作HIVE系統資料庫的方法和修改系統資料庫的思路,經大量試驗證明此種思路很有效,可以用來修改更多其它需要的配置。随着我國的汽車事業的蓬勃發展,汽車導航多媒體系統有着越來越廣闊的應用前景,本項目的經濟效益預計在八十萬元左右。
參考文獻:
[1] 林濤. 嵌入式作業系統Windows CE的研究[J].微計算機資訊,2006,6-2:91-93.
[2] 張冬泉等.Windows CE實用開發技術[M].北京:電子工業出版社,2006年.
[3] [美]微軟公司. Microsoft Windows CE Device Driver Kit裝置驅動程式開發指南[M].北京: 北京希望電子出版社,1999.
[4] 周毓林,甯楊,付林林.Windows CE.net核心定制及應用開發[M].北京:電子工業出版社.2005年.