WINCE6.0支持Multiple XIP

2024-02-12 13:32
文章标签 支持 multiple wince6.0 xip

本文主要是介绍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中。

这篇关于WINCE6.0支持Multiple XIP的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/702676

相关文章

Golang支持平滑升级的HTTP服务

前段时间用Golang在做一个HTTP的接口,因编译型语言的特性,修改了代码需要重新编译可执行文件,关闭正在运行的老程序,并启动新程序。对于访问量较大的面向用户的产品,关闭、重启的过程中势必会出现无法访问的情况,从而影响用户体验。 使用Golang的系统包开发HTTP服务,是无法支持平滑升级(优雅重启)的,本文将探讨如何解决该问题。 一、平滑升级(优雅重启)的一般思路 一般情况下,要实现平滑

sqlite不支持中文排序,采用java排序

方式一 不支持含有重复字段进行排序 /*** sqlite不支持中文排序,改用java排序* 根据指定的对象属性字段,排序对象集合,顺序* @param list* @param field* @return*/public static List sortListByField(List<?> list,String field){List temp = new ArrayList(

一款支持同一个屏幕界面同时播放多个视频的视频播放软件

GridPlayer 是一款基于 VLC 的免费开源跨平台多视频同步播放工具,支持在一块屏幕上同时播放多个视频。其主要功能包括: 多视频播放:用户可以在一个窗口中同时播放任意数量的视频,数量仅受硬件性能限制。支持多种格式和流媒体:GridPlayer 支持所有由 VLC 支持的视频格式以及流媒体 URL(如 m3u8 链接)。自定义网格布局:用户可以配置播放器的网格布局,以适应不同的观看需求。硬

Science Robotics 首尔国立大学研究团队推出BBEX外骨骼,实现多维力量支持!

重复性举起物体可能会对脊柱和背部肌肉造成损伤,由此引发的腰椎损伤是工业环境等工作场所中一个普遍且令人关注的问题。为了减轻这类伤害,有研究人员已经研发出在举起任务中为工人提供辅助的背部支撑装置。然而,现有的这类装置通常无法在非对称性的举重过程中提供多维度的力量支持。此外,针对整个人体脊柱的设备安全性验证也一直是一个缺失的环节。 据探索前沿科技边界,传递前沿科技成果的X-robot投稿,来自首尔国立

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密 可以将表情,动物,水果,表情,手势,猫语,兽语,狗语,爱语,符号,数字,字母,加密和解密 可以将文字、字母、数字、代码、标点符号等内容转换成新的文字形式,通过简单的文字以不同的排列顺序来表达不同的内容 源码截图: https://www.httple.net/152649.html

QtC++截图支持窗口获取

介绍 在截图工具中你会发现,接触到窗口后会自动圈出目标窗口,个别强大一点的还能进行元素识别可以自动圈出元素,那么今天简单分析一下QTc++如何获取窗口并圈出当前鼠标下的窗口。 介绍1.如何获取所有窗口2.比较函数3.实现窗口判断 结尾 1.如何获取所有窗口 1.我们需要调用windows接口EnumWindowsProc回调函数来获取所有顶级窗口,需要包含windows.

Nacos Config 配置中心支持配置共享

文章目录 一、什么是配置中心二、Nacos Config2.1 Nacos Config 工作原理 (★)2.2 Nacos Config 的使用2.3 动态刷新2.4 配置共享2.4.1 同一个微服务的不同环境之间共享配置2.4.2 不同微服务中间共享配置 一、什么是配置中心 微服务架构下关于配置文件的存在以下问题: 配置文件相对分散。在一个微服务架构下,配置文件会随

spring笔记 多线程的支持

spring的工作机制 136  属性编辑器 140 spring事件的体系结构 168 Bean间的关系 109 继承 依赖 引用     Bean的继承          1 为了简化初始化的属性注入;          2 子Bean和父Bean相同的属性值,使用子Bean的     Bean的依赖 Srping控制相互依赖的Bean之间,属性注入的顺序,防止出错  depend-on

PageOfficeCtrl支持直接打开服务器磁盘文件

一般来说,PageOfficeCtrl控件的WebOpen方法的第一个参数是待打开文档的URL,此URL可以是相对于当前页面的相对URL,也可以是相对于整个网站根的相对URL,还可以是http开头的完整URL,但是这个URL必须是当前网站的URL,不能跨域。 现在为了更加方便开发者编程,WebOpen支持打开服务器磁盘文件。也就是说,第一个参数可以写成服务器文件的绝对磁盘路径。例如: P

Jasperreports+jaspersoft studio 实现支持富文本格式的数据

昨天有位博友给我发邮件问我:Jasperreports+jaspersoft studio 如何实现支持富文本格式的数据! 其实,我也是第一次遇到这个问题;我就百度搜索,我记得之前:我解决过用百度编辑器,解析富文本格式的数据,是设置一个属性; 最后,只百度到一篇文章;https://zhidao.baidu.com/question/1430121390482093659.html 废话不多