基於WinCE的嵌入式系統註冊表的研究

http://www.51kaifa.com/html/jswz/200806/read-10147.htm

http://blog.csdn.net/yeqishi/archive/2009/10/21/4706292.aspx   蔣勇俊 的 WINCE 註冊表編輯器

摘要:本文首先講述了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年.

發佈了8 篇原創文章 · 獲贊 6 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章