当前位置:天才代写 > tutorial > JAVA 教程 > 嵌入式系统中的模块动态加载技能

嵌入式系统中的模块动态加载技能

2017-11-12 08:00 星期日 所属: JAVA 教程 浏览:813

副标题#e#

摘要 提出一种合用于嵌入式系统的模块动态加载技能,设计实现简朴,占用资源少,开销小,而且乐成运用于DeltaOS.可提高系统的机动性和扩属性.介招加载与动态链接的道理和应用环境,表明相关术语,描写根基设计思路:具体说明该技能的焦点。即模块声明、挪用库、两级重定位表,最后给出结论。 要害词 模块 动态加栽 嵌入式系统DeltaOS

引 言
跟着电子技能的飞速成长,嵌人式设备应用越来越遍及,巨大度也越来越高。这使得硬件和软件设计比例产生了很大变革,软件开拓的比重越来越大。然而传统嵌入式开拓进程中需要将应用与操纵系统编译链接成一个整体,然后下载到方针机上运行。假如在调试进程中发明问题,需要从头编链接然后反复下载运行的进程。这样的开拓流程周期长并且繁琐,已经越来越不适应快速市场化的需要。

为了适应多样化的嵌入式应用和加速嵌入式系统的开拓进程,除了需要靠得住的基本平台软件的支持,如带有文件系统、网络协议栈的RTOS和配套的集成开拓情况,更重要的是需要可以动态扩展的系统平台。连年来,新一代的嵌入式操纵系统已经开始利用动态扩展技能:将根基系统(包罗操纵系统以及其他共享成果挪用库)和应用措施开拓分隔处理惩罚,支持模块更新和动态加载技能。许多主流的传统嵌入式操纵系统厂商,如windRiver、Green HilIs、Lynxworks,都推出了面向航空航天、基本通信设备等规模的高靠得住、高机能的RTOS版本,支持应用和系统组件的动态加载和更新;而在消费电子规模,相关的操纵系统厂商,如symbian、Palm、Microsoft,更是努力推出了具有相应成果的操纵系统,在新一代移动设备上获得了遍及应用。

为了成为可动态扩展系统平台,大部门嵌入式操纵系统需要利用动态加载技能。总的来说,动态加载是指应用可能系统在运行进程中需要利用某模块的处事,于是通过一系列预定的行动将指定模块加载到系统中,让挪用者继承顺利事情。它实现的要害就是加载与动态链接技能。因为加载和动态链接相互依赖,干系细密,所以将两者放在一起举办接头。

1 加载与动态链接机制
加载主要认真将模块措施从二级存储设备(好比硬盘可能Flash)搬移到指定内存空间,而且将模块交由系统加载器统一打点。

措施链接分为静态链接、加载时链接和运行时链接。静态链接就是将措施和它运行所需的全部库链接成一个执行文件。它的利益是可以独立运行、速度快,可是它链接生成的代码尺寸较量大。加载时链接是指措施在编译链接时不会把它用到的库链接到执行措施中,而是在它被加载器加载时才理会执行文件,依次把用到的库装载到系统中让其运行。它的利益是措施自己代码量减小,但运行时措施占的内存并没有减小,同时增加了加载器的事情量。动态链接是加载时链接的进一步成长,它是指将库的加载进程延迟到措施运行时执行。这种方法不会给措施引入特另外代码,也不会增加加载器的开销,只有当应用真正利用某库时才会加载该库,淘汰了不须要的空间占用。它的缺点是大概会有一些运行开销。

嵌入式系统中动态加载和普通的动态链接观念雷同,可是嵌入式系统中的加载链接器有其自身的特点:它是交错加载,主机端做一部门事情,好比措施的重定位,执行文件的理会等等;而方针机端相对简朴,主要做模块搜索定位和空间分派,以及指定物理地点可能映射虚拟地点让其运行。一部门嵌入式系统不支持虚拟内存,应用和内核共享存储空间。当系统加载了多个应用到系统中时,一般需要利用overlap技能来办理内存空间有限的问题,等于当多个应用的运行地点空间斗嘴时,加载器会冻结当前临时不运行的应用,让新加载的应用利用指定的地点空间,PairnOS中就回收了这样的设计。对付支持虚拟内存的嵌入式系统,加载器的事情被大大简化,每个应用都有可以运行在同样的虚拟的空间,不需要加载器为其重定位或利用overlap技能,因此提高了事情效率。Vxworks6.O,WinCE都利用了这种设计。两种方法在差异的规模都有较量多的应用。

文中提出的模块动态加载技能是基于支持MMU(Memory Management Unit)的32位嵌入式操纵系统,回收了加载与动态链接技能。利用该技能构建的嵌人式系统面向高端市场,出格是对系统靠得住性、安详性要求很高的规模。在DeltaOS新一代高靠得住的版本HAR(High Available Reliable system)的研发进程中,即乐成地实现了基于该设计的加载器LambdaLoader,到达了预期的性
能要求。

#p#分页标题#e#

2 模块动态加载的设计
2.1 设计思路
首先界说一些观念:模块、方针措施、接口函数地点表和挪用库(call Library)。
①模块,主要是指加载器加载的一个单元,而且这里模块的观念主要是强调它是为应用可能系统提供一系列处事的提供者。
②方针措施,是指模块的利用者。它可以是应用,也可以是另一个模块。
③接口函数地点表(文中也称之为模块重定位表),指在模块中有一个数组表,该数组表的内容是该模块对外提供的函数接口的地点。
④挪用库,是供模块挪用者链接利用的专有库。它与相关模块一一对应,将封装了的模块接供词方针措施利用。除此以外,它尚有一个运行时才确定的模块重定位表地点指针和模块动态查找定位的代码。

假如在系统中要实现动态加载,首先需要一种模块定位机制,使得挪用者可以或许在系统中动态定位需要的模块,其次是要能让模块与方针措施动态的关联在一起,协调事情。为了办理这些问题,需要一系列相关的设计:划定模块的声明方法;简化方针机端模块地点空间定位的事情;重定位表的机制等等。基于这样的设计,系统可以较量顺利地实现动态加载。模块动态加载的事情流程如图l所示。这里描写的主要是方针机端的事情。

嵌入式系统中的模块动态加载技术

2.2 模块的声明
模块首先要界说它的相关属性。这里利用模块声明文件来完成这个事情。模块声明文件中需要界说:模块名字、版本、对外提供的API接口。在系统编译模块措施后,会挪用一系列的script代码。这些script会按照模块名字查找模块对应的模块声明文件,并按照该文件生成供模块挪用者利用的挪用库和与模块一起链接的附加库。 附加库包括系统靠山通过挪用script生成的接口函数地点表和模块注册函数。在每个模块的初始化函数中,会挪用一个模块的注册函数(该函数主要事情是向系统注册模块的名字和接口函数地点表地点)。当模块被加载时,初始化函数会被系统挪用,向系统注册模块信息,从此模块交由加载器统一打点。


#p#副标题#e#

2.3 挪用库
 每个模块在提供一个模块重定位表的同时,必需提供一个与之对应的模块挪用库。此外方针措施必需而且只能通过挪用库来利用这个模块提供的处事。每个挪用库都有一个存储本模块重定位表的地点指针变量。该变量在模块被方针措施第一次利用时会被初始化为相应模块重定位表地点。

在模块第一次被方针措施利用即开始动态加载进程时,首先运行的是挪用库的库初始化代码(Library initialcode),它通过指定的系统挪用来初始化库中的模块重定位表基地点指针。从此每次方针措施利用模块提供的函数接口时,都通过以下公式获得该接口的实际地点:模块接话柄际地点=模块重定位表基地点+函数index×4

在该公式中,函数index是指对应函数在模块重定位表中的数组下标值。因为按照模块声明文件生成的挪用库中已经包括了每个函数的索引信息(index),同时在32位系统中需要乘以4获得精确的偏移量,所以当挪用库中重定位表地点被初始化后,可以通过这样一个简朴计较获得指定接话柄际地点,完成函数挪用。

当一个方针措施利用了模块,并正确动态加载后,其干系如图2所示。方针措施中链接了挪用库,包括了函数跳转表和指向模块重定位表基地点的指针(ModuleBase);模块中则链接了附加库,包括了函数接口地点表(模块重定位表)。挪用模块函数时,颠末动态加载模块的进程今后,方针措施的模块重定位表基址指针指向了对应模块的函数接口表,然后函数挪用就可以顺利举办了。

嵌入式系统中的模块动态加载技术

2.4 两级重定位表
在嵌入式规模,为了低落机能开销和增加确定性,方针机端加载器不会做措施重定位,而将相关事情在主机端完成,所以方针机端加载的所有措施都是绝对定位后的措施.为了实现系统动态扩展,必需使各个模块可以或许单独链接生成执行措施,而且运行时不消体贴互相的定位,这样纵然一个模块被动态替换后也能同其他措施一起协调运行。这里通过两级重定位表机制来完成这个协调性的事情。 对付内核、操纵系统组件模块或提供处事给其他方针措施利用的模块,要维护一张本模块提供的接口函数地点表(即模块重定位表,这里称之为二级重定位表)。为了担保本模块的向后兼容性,模块必需担保其接口函数在模块重定位表中的相对位置牢靠。纵然此后不能提供这个接口函数,也需要将其保存,以担保同以前版本的二进制兼容性。

#p#分页标题#e#

在模块的初始化代码中,模块通过系统挪用向加载器注册这个模块重定位表的地点,注册时需提供模块名和模块重定位表的地点。加载器中打点着一个称为一级重定向表的表格。这个表的表项是“模块名”到“模块重定位表地点”的映射。因为这只是一个映射干系,所以各个模块对应的表项在一级表中的详细位置是可以改变的。

二级重定位表如图3所示。

嵌入式系统中的模块动态加载技术

利用两级重定位表的法则如下:
(1)模块可通过模块重定位表向其他方针措施提供接口函数;
(2)方针措施要利用此外模块提供的接口函数必需通过对应模块的挪用库来实现;
(3)方针措施在利用此外模块提供的接口函数之前,必需通过加载器提供的系统挪用处事获取对应模块重定位表来基地点初始化对方的挪用库。

 

    关键字:

天才代写-代写联系方式