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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435655.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】飞扬青云_Qt开发经验

转自:Qt开发经验: 自己总结的这十多年来做Qt开发以来的经验,以及Qt相关武林秘籍电子书,会一直持续更新增加,欢迎各位留言增加内容或者提出建议,谢谢! 一、开发经验 01:001-010 当编译中发现大…

【转】PF_RING开发指南

转自:PF_RING开发指南-yww680169-ChinaUnix博客 1. 概述 PF_RING是Luca Deri发明的提高内核处理数据包效率,并兼顾应用程序的补丁,如Libpcap和TCPDUMP等,以及一些辅助性程序(如ntop查看并分析网络流量等&#…

wince中BIB文件的详细介绍

wince中BIB文件的详细介绍 在WinCE中使用的一个重要的文件就是BIB文件,全称Binary Image Builder File。在WinCE的编译过程中会用到BIB文件,应该是在最后的Makeimg阶段。所有的BIB文件会被合并成CE.bib文件,然后Romimage.exe会根据BIB文件中的…

【转】libpcap实现机制及接口函数

转自:libpcap实现机制及接口函数 - 简书 1.Libpcap 的工作原理 Libpcap的工作原理可以描述为,当一个数据包到达网卡时,通过网络分接口(即旁路机制)将数据包发给BPF过滤器,匹配通过的数据包可以被libpcap利…

打印机打印第一页的问题

有的时候打印文档的时候,很多页纸,但是打印机总是在第一页打完后就卡住。不动了。 解决办法:打印机属性 –》 高级 - 》“高级打印”的选择取消掉就OK啦。转载于:https://www.cnblogs.com/cryloo/archive/2010/01/27/1657921.html

WinCE BSP的BIB文件介绍

在WinCE中使用的一个重要的文件就是BIB文件,全称Binary Image Builder File。在WinCE的编译过程中会用到BIB文件,应该是在最后的Makeimg阶段。所有的BIB文件会被合并成CE.bib文件,然后Romimage.exe会根据BIB文件中的描述来决定哪些文件最终被…

惊!MySQL官网巨变,下载被取消

随着欧盟的批准,甲骨文宣布收购Sun交易完成,与此同时甲骨文一系列动作也迅速展开。 甲骨文因MySQL被欧盟卡了大半年,在中国,MySQL的用户非常多,MySQL的前途无疑让人牵肠挂肚。并购之前,甲骨文说了很多&…

【转】【C++学习笔记】C++异常处理

转自:【C学习笔记】C异常处理!你绝对不能错过的干货! - 知乎 合理地使用C异常处理,能够使我们写出来的程序更加稳定强健,不易崩溃。那么,应该如何使用C异常处理呢?下面,我们就来向大…

关于WinCE中config.bib的问题

这两天在看关于bootloader的事情。以前的同事提到开机速度的问题,顺便也就提到了nk的大小的问题。这一连串的事情使得想回头再看看config.bib的事情。这篇文章也算来总结下。也接触过一些ARM的芯片以及对应的BSP包。config.bib文件在msdn上一段解释如下:…

【转】源码分析C++的string实现

转自:源码分析C的string实现 - 知乎 我们平时使用C开发过程中或多或少都会使用std::string,但您了解string具体是如何实现的吗,这里程序喵给大家从源码角度分析一下。 读完本文相信您可以回答以下问题: string的常见的实现方式…

wince bib文件合成

在WINCE中,reg文件和bib文件是两种重要的文件,它影响了整个的CE系统。在解析的过程中,原始的Common.bib, Config.bib, Project.bib, Platform.bib等文件会合成为ce.bib,而原始的Common.reg, Project.reg, Platform.reg等文件会合成Reginit.ini文件,并进一…

WINCE的BIB文件解析

BIB的全称为Binary Image Builder,在Wince编译过程中的最后MakeImage阶段会用到BIB文件,BIB文件的作用是指示构建系统如何构建二进制映像。所有的BIB文件会被合并成CE.bib文件,然后打包工具Romimage.exe会根据BIB文件中的描述来决定哪些文件最…

做一个项目,平时都用到哪些工具提高效率(上)

做.NET 相关项目,Visual Studio 2008,SQL Server 2000/2005是标准的配置,但是,除此之外,还可以应用哪些工具来提高工作效率,让项目做的更轻松。 1 需要一个代码生成工具,生成实体层,数据访问代…

【转】傅里叶分析之掐死教程(完整版)更新于2014.06.06

转自:傅里叶分析之掐死教程(完整版)更新于2014.06.06 - 知乎 作 者:韩 昊 知 乎:Heinrich 微 博:花生油工人 知乎专栏:与时间无关的故事 谨以此文献给大连海事大学的吴楠老师,柳…

wince6.0编译命令分析

下面从CSDN帮助文档简要说明vs2005下面的系统编译命令,这些命令位于Build->Advanced Build Commonds 一共有六条命令,分别是: 1.Sysgen 2.Clean Sysgen 3.Build and Sysgen 4.Rebuild and Clean Sysgen 5.Build Current BSP and Subprojec…

【转】C,C++宏中#与##的讲解

转自:C,C宏中#与##的讲解 - MoreWindows - 博客园 文中__FILE__与示例1可以参见《使用ANSI C and Microsoft C中常用的预定义宏》 宏中的#的功能是将其后面的宏参数进行字符串化操作(Stringizing operator),简单说就是在它引用的…

wince对中文字体的支持

最近情况真的是很糟,小小年纪,得了好几样小毛病,弄得每天都提不起精神来,恍恍惚惚的,幸好有妻子的支持,她不论自己多忙多累,一看到我情绪不好,就给与很多安慰,百般鼓励&a…

提示信息的窗口效果

代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns"http://www.w3.org/1999/xhtml"><head><title>提示信息的窗口效果<…

【转】C++中如何区分构造函数与重载operator()得到的仿函数?

转自&#xff1a;C中如何区分构造函数与重载operator()得到的仿函数?求大神!_360问答 此外,你觉得仿函数(functor)是否能完全取代function呢? 以下是个人使用C仿函数&#xff0c;function表达式的一些体悟。 首先是定义形式&#xff1a; 构造函数无返回值&#xff0c;而o…

WINCE添加新字体需要注意的一些问题

之前测试使用dgwulm.ttf字体&#xff08;GPS软件WolfNCU中带的&#xff09;&#xff0c;发现了一些添加新字体的时候可能被忽视的问题。 在WINCE系统中&#xff0c;除了将字体文件加入到系统内核NK之外&#xff0c;还可以动态的方式添加新字体&#xff0c;使用函数AddFontReso…