How to Use Hive-based Registry IN WINCE.NET
WINCE本身是一個完全在內存中運行的系統。每次啟動都需要把NK.BIN拷貝到內存中相對應的地址。這樣的系統就不需要了系統維護,但是如何“永久”的保存設置就成了問題。本文將介紹如何在Wince中實現設置的永久保存。
關鍵字:
WINCE、嵌入式操作系統、Hive-based Registry
作者
Tony
Email:gzci@163.com
Windows CE .NET是Windows CE 3.0的后繼產品。Windows CE .NET為嵌入式市場從新設計,為快速建立下一代智能移動和小內存占用的設備提供了一個健壯的實時操作系統。Windows CE .NET具備完整的操作系統特性集包和端對端開發環境,它包括了創建一個基于Windows CE的定制設備所需的一切,例如:強大的聯網能力、強勁的實時性和小內存體積占用以及豐富的多媒體和Web瀏覽功能。
?WINCE本身是一個完全在內存中運行的系統。每次啟動都需要把NK.BIN拷貝到內存中相對應的地址。關機之后內存中的數據將都“消失”。這樣的系統就不需要了系統維護,但是如何“永久”的保存設置就成了問題。通過查找資料找到了一個微軟提供的解決辦法。具體實現方法如下:
第一步:在PB的Catalog里面將Hive-based Registry加入到我們的Platform之中。
?
第二步:在Platform.reg中修改[HKEY_LOCAL_MACHINE\init\BootVars]下面的設置為:
"SystemHive"=""
"Start DevMgr"=dword:
在我們系統中是從CF卡中直接啟動,相當于Windows系統的C盤,所以具體更改如下:"SYSTEMHIVE"="Documents and Settings\\system.hv"
"PROFILEDIR"="Documents and Settings"
"Start DevMgr"=dword:1
SYSTEMHIVE是system.hv文件保存的路徑。Start DevMgr是選擇是否啟動設備管理器(Device Manager),啟動設備管理器的目的是為了啟動一些Hive-based Registry所必須的設備。(Start DevMgr?is a Boolean value indicating whether or not to start the Device Manager so it can start the drivers necessary to reach the registry hives. A value of 1 causes the Device Manager to start; 0 keeps the Device Manager from starting. The only case in which the Device Manager should not start is if you want to store the hives in the object store, which causes the hives to be lost on a cold boot. Typically, the hives are stored outside RAM, so it is necessary to start the Device Manager.)
第三步:在Platform.reg中修改[HKEY_LOCAL_MACHINE\init\BootVars]下面的"DefaultUser"=""設置,以確定調用哪個默認用戶的Hive-based Registry。如果不是多用戶可以不做設置。
第四步:確定一下Platform.reg和Common.reg當中所有的啟動驅動程序的注冊項是否設置。你可以在Platform.reg和Common.reg中搜索
; HIVE BOOT SECTION
; END HIVE BOOT SECTION
這樣的字段。有許多項需要設置,包括IRQ、IO、PCI等,不過一般的如果你沒有修改過,系統默認的就可以了。這些設置是告訴ROM registry builder需要把什么加入到boot hive中。
?
第五步:啟動必須在第一啟動階段啟動的驅動程序。我們先看一下下面的關于第一啟動階段的描述:
?
很顯然的Filesys是必須在第一啟動階段啟動的。在common.reg中找到相關的文件系統的設置,添加"Flags"=dword:1000,我們用的fat文件系統,具體設置如圖:
第六步:設置MountFlags的注冊值為DWORD:2。在Common.reg中的:
[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\?\]
設置: "MountFlags"=dword:2
第七步:確定是否需要注冊表刷新機制。一般情況下在OS掛起或者重啟動等軟起動的時候系統會自動的刷新保存注冊表;但是當系統突然掉電的話,注冊表是不會保存的。所以就需要在更改了設置之后對注冊表進行刷新。一般的解決方案是在用戶進行了設置之后運行保存設置程序(調用RegFlushKey)進行設置的保存;不要定時的刷新注冊表,這樣會是整個系統變的很慢。
第八步:完全的重新build,make image,重新生成nk.bin。
通過以上的設置Wince系統中就可以實現設置的永久保存了。
?
參考文獻:
Microsoft Windows CE .NET 4.2 HELP VERSION 4.0
?
下面分享一下我在WINCE5。0下做好保存設置的方法(用的ARMSYS2440平臺,很簡單哦,理論的東西就不多說了,上面兩篇文章講得比較清楚了):
第(1)步,在當前Platform下加入Hive-based Registry的支持;
第 (2)步,在注冊表platform.reg中查找“; HIVE BOOT SECTION”,有兩處,在第二處(原來是:IF BSP_NONANDFS !的地方),將; HIVE BOOT SECTION 和 ; END HIVE BOOT SECTION之間的內容替換成:
[HKEY_LOCAL_MACHINE\init\BootVars]
??? "SystemHive"="system.hv"
??? "Start DevMgr"=dword:1
??? "RegistryFlags"=dword:1
[HKEY_LOCAL_MACHINE\init\BootVars]
?? "DefaultUser"="default"
IF BSP_NONANDFS !
[HKEY_LOCAL_MACHINE\System\StorageManager\AutoLoad\SMFLASH]
??? "DriverPath"="Drivers\\BuiltIn\\SMFLASH"
??? ; LoadFlags 0x01 == load synchronously
??? "LoadFlags"=dword:1
??? "BootPhase"=dword:0
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\SMFLASH]
??? "Prefix"="DSK"
??? "Dll"="smflash.dll"
??? "Index"=dword:1
??? "Order"=dword:0
??? "Profile"="SMFLASH"
??? "IClass"="{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
?? "Flags"= dword:1000??????????? ;;;;;;;;;;
[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SMFLASH]
??? "DefaultFileSystem"="BINFS"
??? "AutoPart"=dword:1
??? "AutoMount"=dword:1
??? "PartitionDriver"="mspart.dll"
??? "Name"="Microsoft Flash Disk"
??? "Folder"="ResidentFlash"
??? "BootPhase"=dword:0
?? "MountFlags"=dword:2
??? "Flags"= dword:1000??????????? ;;;;;;;;;;
; Keep FATFS from trying to shadow \Windows
[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SMFLASH\FATFS]
??? "Flags"=dword:14
??? "FormatTfat"=dword:1
??? "CheckForFormat"=dword:1
?????
[HKEY_LOCAL_MACHINE\System\StorageManager\FATFS]
??? "Flags"=dword:00000014?? ;FATFS_TFAT_ALWAYS|FATFS_FORCE_TFAT
???? "MountFlags"=dword:0
ENDIF ; BSP_NONANDFS
; END HIVE BOOT SECTION
第(3)步,最后一步,重新Sysgen(要選擇clean before building),最后build BSP,makeimg。
總結
以上是生活随笔為你收集整理的How to Use Hive-based Registry IN WINCE.NET的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux查询服务器的dns,如何查看L
- 下一篇: 设计模式——Iterator模式实现研究