WINCE6.0支持Multiple XIP

1.    Multiple XIP support

XIP(eXecute-In-Place)是本地执行,允许在ROM芯片内执行XIP区域(region)的应用代码,而不必再把代码读取到RAM中来执行。WINCE支持我们在单个系统中构建(construct)多个XIP区域,基于下面的理由使用多个XIP区域来代替单个区域:

⑴可以把应用(application)分成实用的子集(functional subsets),并且支持从OS内核中分开安装。

⑵增加新特征(feature)时,不需要替换整个运行时镜像(run-time image)。

⑶当解决掉一个bug后的更新不需要替换整个运行时镜像。

⑷用户可以更新运行时镜像。

⑸更新运行时镜像是永久性(permanent)的,在冷启动时不容易受影响。

闪存(flash memory)作为掩膜只读存储器(masked ROM)的替代品日益广泛使用,是一种支持多个XIP区域的芯片技术。在这个讨论多个XIP区域的帮助主题中,和ROM相关的闪存用于保存系统镜像(system image)。

多个XIP区域把ROM镜像分成分离的和地址逐渐递增的单元,在此借用下图来说明,

 

 

图1

那如何划分XIP镜像呢?要考虑区域中模块(module)和文件(files)的所有者,并且要考虑这些模块和文件的功能,基于这样的思想来划分。

需要注意的是XIP不能跨过不连续的物理区域,尽管虚拟地址连续,当跨越不同物理区域的代码在本地执行时,一些设备没有响应(unresponsive)。没有压缩并且跨越不连续物理区域的文件和模块在没有经过复制的情况下被直接映射或是访问,但是内核(kernel)只处理物理连续的文件。

2.    Multiple XIP Regions

因为我们可以在单个系统中构造多个XIP区域,从这点上,在使用多个存储区(memory area,比如设计中同时使用ROM、flash等多个存储器)的应用场合,我们可以使用XIP的功能。比如,我们可以安装OS的内核部分在ROM中,和把OS的其他部分安装在闪存(flash memory)中。XIP应用能够在两个地方执行,我们可以根据需要逐渐以地址递增的方式规划闪存区域(flash region),但是存储器中的XIP区域必须使只读的,比如图1中的XIPKERNEL.NBO在NAND Flash中必须使只读的。

       我们可以根据自己的需要把多个ROM区域链接(chain)起来,在通过usb下载XIP镜像的时候,就是通过下载chain.lst,接着eboot根据此lst文件自动下载XIPKERNEL.bin、NK.bin和chain.bin文件,然后启动WINCE操作系统的。我们每次增加一个ROM区域时,内核可以替代另一个ROM区域,这里内核不是物理上替换这个模块,而是用一个不同的ROM区域中的模块来代替它的功能性(Each time you add a ROM region, the kernel may replace another ROM region. The kernel does not physically replace the module, but replaces its functionality with a new module in a separate ROM region)。我们定义ROM区域的顺序决定了OS在上面写入模块的次序。包含NK.exe的ROM区域位于管理多个ROM区域的目录清单底部,见图1,我们的nk.exe就是包含在XIPKERNEL.bin中的。内核增加新的特征在目录清单顶部,也就是图1的NK.nb0部分,这样可以让我们通过连接其他的ROM区域来替换除了nk.exe之外的原始镜像的模块。

 

为了增加一个ROM区域(可以理解为xxx.bin)到一个已经存在的运行时镜像中,创建一个列新的.bib文件,此文件列举我们要增加到或是替换一个已经存在的OS设计中的模块。如果要增加一个新的.exe文件或者替换一个已经存在的一个,只需要增加一个.exe文件到.bib文件中。

 

如果我们增加或是修个一个DLL,那必须在.bib文件中制定一个增加的入口。在WINCE中,所有的DLL文件从虚拟内存进程空间自上到下加载(all DLLs load from the top down in the virtual memory process space)。因为WINCE在相同的的地址位置为一个指定的.exe文件装载所有DLL文件,.bin文件的MODULES部分为所有DLL文件预留相同大小的虚拟内存空间。对于任何指定的进程,系统不是装载同样的DLL文件到进程地址空间中,就是为后来的装载预留空间(For any specified process, the system either loads the same DLLs to the process address space or reserves space to load later)。当使用Makeimg.exe来编译一个ROM镜像(比如nk.bin)时,它会生成镜像中DLL的开始地址和最后的地址,如下:

First DLL Address:   01f90000h

Last DLL Address:    02000000h

 

       我们必须在新.bib文件的CONFIG部分包含一个入口,使用DLLHIGHADDR来指定关联的ROM镜像的DLL地址空间的起始地址。此起始地址是原来(original).bin文件中为DLL分配的虚拟内存空间的最低地址。在新的.bin文件中,Makeimg.exe从系统可以开始预留和装载的虚拟内存中列出开始地址,系统从起始地址开始预留存储空间(The system reserves memory from the starting address down),下面的示例代码解释了一个新的.bin文件生成一个示例DLL的开始地址:

DLLHIGHADDR=0x01f90000

 

我们要确保XIP区域不能重叠,如果重叠会导致系统不能正常启动。为了避免引起系统问题,需要在DLL区域之间留下一定的内存空间,但这样会减少一个进程中可用虚拟内存的大小。因为内核为所有ROM预留同样大小的虚拟内存空间来装载DLL,内核从不使用DLL之间的内存空间。在不需要重新安排紧接着其后的ROM镜像的情况下,使用这个内存空间来扩大ROM镜像的DLL空间。

 

内核许可一个DLL从一个镜像完全剥离出来,即使这个DLL与其他的模块隐式关联。Romimage.exe打印一个缺少DLL的警告,但仍然创建这个镜像文件。这样使我们可以从RAM文件系统或是目标控制框架(target control shell)中装载这个找不到的DLL。

 

3.    Booting an image with Multiple XIP Regions

如要引导(boot)一个multiple XIP的镜像,bootloader必须装载数据到flash存储器或者RAM中,接着OEMInit函数必须处理XIP链(chain)中的每个入口,增加每个入口到OEMRomChain结构体中,此结构体的定义如下图所示:

 

 

图2

OEM在config.bib中能够制定所有XIP的ROMChain次序,比如图1所示,依次是xipkernel、chain和nk。如果遍历(traverse)OEMRomChain结构体的链表且在内核(在此为xipkernel.bin)存储的位置上又找不到内核,那么内核自动附加ROM到OEMRomChain链表中。

4.    Building an image with Multiple XIP Regions

创建一个由多个XIP区域组成的镜像,是由config.bib和IMGMULTIBIN(但实际上是IMGMULTIXIP)环境变量来控制,此变量必须设置为1,如在smdk6410.bat中设置如下:

set IMGMULTIXIP=1

多个XIP成功编译将生成下面的文件:

⑴为每个XIP区域生成一个对应的.bin文件,比如xipkernel.bin、chain.bin和nk.bin。

⑵一个单独的xip.bin文件,此文件包含所有的xip区域文件,比如xip.bin=xipkernel.bin+chain.bin+nk.bin。

⑶一个XIP链的bin文件,为chain.bin文件。

⑷如果config.bib文件中设置了ROMSTART,ROMWIDTH或是ROMSIZE,那么会生成xip.nb0文件。Xip.nb0文件时所有的.bin文件的布局,如图1所示,包含chain.bin,因为它们(xipkernel.bin、chain.bin和nk.bin)应保存在ROM中。

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

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

相关文章

【转】How to install VNC server on ubuntu 14.04

转自:https://www.krizna.com/ubuntu/install-vnc-server-ubuntu-14-04/ VNC server is used to share graphical desktop which can be controlled from other computers . This guide is helpful to install VNC server on Ubuntu Desktop 14.04, Ubuntu server …

Nsis 使用1-- 依条件显示自定义页面 custom page on condition

在制作安装程序的时候,我们会经常遇到根据用户的不同选择而随后显示不同的安装信息采集页面。 其实很简单,在使用NSIS的时候发现了这么个方法,记下来防止自己忘记哈:Code; MUI 2 compatible ------!include "MUI2.nsh"!…

WINCE6.0操作系统---内核(kernel)学习

备注:这里的内核指kernel,其表现形式为kernel.dll,OS指操作系统,core指核心。 图1 WINCE6.0体系结构 1. kernel的组成和功能 WINCE6.0操作系统内(kernel)在代码中的表现形式是kernel.dll(也就是kern.dll), WINCE5…

【转】WPF调用图片路径,或资源图片

转自:https://www.cnblogs.com/sntetwt/p/5402098.html 一、加载本项目的图片 WPF引入了统一资源标识Uri(Unified Resource Identifier)来标识和访问资源。 其中较为常见的情况是用Uri加载图像。Uri表达式的一般形式为:协议授权路径 协议:pa…

如何自学java迅速成为java高手

很多网友咨询学习Java有没有什么捷径,我说“无他,唯手熟尔”。但是JAVA私塾愿意将一些经验写出来,以便后来者少走弯路,帮助别人是最大的快乐嘛! 要想学好Java,首先要知道Java的大致分类。我们知道,自从Sun推出Java以来…

WINCE6.0体系结构学习

WINCE6.0的体系结构图如下图所示: 图1 WINCE的体系结构 根据上图可以把WINCE6.0体系结构分为硬件层、OEM层、操作系统层和应用层,这四层紧密合作,相互配合来完成从应用程序的调用到对硬件的操作和交互。 1. 硬件层 硬件平台的核心是嵌入…

【转】DICOM图像像素值(灰度值)转换为CT值

转自:https://www.cnblogs.com/xuhui24/p/6193032.html https://zhuanlan.zhihu.com/p/358770379 CT值的单位是Hounsfield,简称为Hu,范围是-1024-3071。用于衡量人体组织对X射线的吸收率,设定水的吸收率为0Hu。 在DICO…

无限级分类查询

关于无限级分类的查询问题 分类表cataid parentid1 02 13 14 25 2 表 table1 id cataid title 一个分类信息表,根类别是parentid为0的 这时要查询出类别1下面的所有内容,怎么查,?转载于:https://www…

C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别

一般我们进行成员变量初始化用两种方法 第一种是通过在构造函数内赋值 class Point{public:Point(){ _x 0; _y 0;};Point( int x, int y ){ _x 0; _y 0; }private:int _x, _y;}; 第二种是使用初始化列表 class Point{public:Point():_x(0),_y(0){};Point( int x, int y ):_…

【转】深度理解C# 的执行原理

转自:https://zhuanlan.zhihu.com/p/47177008 从编译原理说起虚拟机是什么C# 是什么,IL 又是什么.Net Framework vs MonoUnity3D 中的 C#小结作者:易立 | 腾讯IEG高级工程师为什么 Unity3D 可以运行 C#,C# 和 Mono 是什么关系&am…

C#提供的类库能够轻松实现对文件的操作

//C#写入/读出文本文件 stringfileName "c:I.txt";   StreamReader sr newStreamReader(fileName); stringstrsr.ReadLine (); sr.close();  StreamWriterrwFile.CreateText(Server.MapPath(".")"\myText.txt");   rw.WriteLine("写入…

Java程序员的推荐阅读书籍

作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从。我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水…

【转】Win10系统创建WiFi热点的两种方法

现在电脑和wifi已经成为很多人生活中不可缺少的一部分,上网过程只有连接WiFi才可以上网。使用windows10系统开启WiFi热点都是提示没有找到支持的无线网卡。不管你是驱动更新,重装,还是怎么操作都是不能用。为此,大家不妨参考下文方…

影院平台搭建 - (6)一个靠谱的视频播放方案的感想

折腾了我很久很久,让我一个月内天天只睡不到6个小时。总算折腾出一套至少我觉得是比较靠谱的东西了。在这里总结一下:1、如果追求画面质量,就不要用FLV格式,算法的先天缺陷导致无论怎么调试画面质量都不能上去。YouTube用MP4格式作…

【转】Win10系统怎么设置无线做AP热点_win10设置无线为ap热点的步骤

转自:http://www.win7zhijia.cn/win10jc/win10_33126.html 在win10系统中,默认情况下无线网卡大部分都用于STA模式,但是有时候需要将无线网卡的工作模式为SoftAP,这样如果有双网卡的话,就能够将本机网络共享给其他PC或…

虚析构函数解析

C 指出:当一个派生类对象通过使用一个基类指针删除,而这个基类有一个非虚的析构函数,则结果是未定义的。运行时比较有代表性的后果是对象的派生部分不会被销毁。如果一个类要被另外一个类继承,而且用其指针指向其子类对象时&#…

SQL Server 2005参考:PIVOT

SQL Server 2005参考:PIVOT 可以使用 PIVOT 和 UNPIVOT 关系运算符对表值表达式进行操作以获得另一个表。 (1)PIVOT 通过将表达式某一列中的唯一值转换为输出中的多个列来转换表值表达式,并在必要时对最终输出中所需的任何其余的列值执行聚合。 (2)UNPIV…

【转】wifi的几种工作模式

转自:https://www.cnblogs.com/Ph-one/p/12455362.html https://www.cnblogs.com/jpzhu/p/11983992.html WIFI配置具体的模式主要有以下这几种:STA模式、AccessPoint模式、Monitor模式、Ad-hoc(IBSS)模式、WDS模式、Mesh模式。 …

C++结构体实例和类实例的初始化

结构体实例(包括共用体)和类实例的初始化方法完全相同,二者都可以应用于继承层次中。不同点是结构体(包括共用体)默认成员为public,而类默认成员是private型的。 一、若类和结构体所有数据成员均为public型…

【转】WIFI-Direct(Wifi直连)、AirPlay、DLAN、Miracast功能介绍

转自:https://www.cnblogs.com/yuanqiangfei/p/11674640.html 不知道大家对无线同屏技术有多少了解,当这种技术普及的时候,我想我们的工作与生活又会方便很多吧!下面是目前三种主流同屏技术的介绍: 目前这种将终端信…