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

M !

!""#$%%

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

"电子科技大学!!杨伟!罗蕾

!摘!要

提出一种适用于嵌入式系统的模块动态加载技术!设计实现简单!占用资源少!开销小!并且成功运用于

I .-,@<5!

可提高系统的灵活性和扩展性"介绍加载与动态链接的原理和应用情况!解释相关术语!描述基本设计思路#详细说明该技术的核心!即模块声明$调用库$两级重定位表!最后给出结论"!关键词

模块!动态加载!嵌入式系统!I .-,@<5

引!言

随着电子技术的飞速发展!嵌入式设备应用越来越广泛!复杂度也越来越高"这使得硬件和软件设计比例发生了很大变化!软件开发的比重越来越大"然而传统嵌入式开发过程中需要将应用与操作系统编译链接成一个整体!然后下载到目标机上运行"如果在调试过程中发现问题!需要重新编链接然后重复下载运行的过程"这样的开发流程周期长而且繁琐!已经越来越不适应快速市场化的需要"

为了适应多样化的嵌入式应用和加快嵌入式系统的开发过程!

除了需要可靠的基础平台软件的支持!如带有文件系统#网络协议栈的D Q <5和配套的集成开发环境!更重要的是需要可以动态扩展的系统平台"近年来!新一代的嵌入式操作系统已经开始使用动态扩展技术$将基本系统%包括操作系统以及其他共享功能调用库&和应用程序开发分开处理!支持模块更新和动态加载技术"很多主流的传统嵌入式操作系统厂商!如S ’+4D ’_.)#F )..+

P ’--/#R 6+Z ‘*)^/!都推出了面向航空航天#基础通信设备等领域的高可靠#高性能的D Q <5版本!支持应用和系统组件的动态加载和更新’而在消费电子领域!相关的操作系统厂商!如5623’@+#8@-2#&’()*/*A ,!更是积极推出了具有相应功能的操作系统!在新一代移动设备上得到了广泛应用"

为了成为可动态扩展系统平台!大部分嵌入式操作系统需要使用动态加载技术"总的来说!动态加载是指应用或者系统在运行过程中需要使用某模块的服务!于是通过一系列预定的动作将指定模块加载到系统中!让调用者继续顺利工作"它实现的关键就是加载与动态链接技术"因为加载和动态链接互相依赖!关系紧密!所以将两者放

在一起进行讨论"

!!加载与动态链接机制

加载主要负责将模块程序从二级存储设备%比如硬盘或者E -@/]&搬移到指定内存空间!并且将模块交由系统加载器统一管理"

程序链接分为静态链接#加载时链接和运行时链接"静态链接就是将程序和它运行所需的全部库链接成一个执行文件"它的优点是可以独立运行#速度快!但是它链接生成的代码尺寸比较大"加载时链接是指程序在编译链接时不会把它用到的库链接到执行程序中!

而是在它被加载器加载时才解析执行文件!依次把用到的库装载到系统中让其运行"它的优点是程序本身代码量减小!但运行时程序占的内存并没有减小!同时增加了加载器的工作量"动态链接是加载时链接的进一步发展!它是指将库的加载过程延迟到程序运行时执行"这种方式不会给程序引入额外的代码!也不会增加加载器的开销!只有当应用真正使用某库时才会加载该库!减少了不必要的空间占用"它的缺点是可能会有一些运行开销"

嵌入式系统中动态加载和普通的动态链接概念类似!但是嵌入式系统中的加载链接器有其自身的特点$它是交叉加载!主机端做一部分工作!比如程序的重定位!执行文件的解析等等’而目标机端相对简单!主要做模块搜索定位和空间分配!以及指定物理地址或者映射虚拟地址让其运行"一部分嵌入式系统不支持虚拟内存!应用和内核共享存储空间"当系统加载了多个应用到系统中时!一般需要使用*_.)-@?技术来解决内存空间有限的问题!即是当多个应用的运行地址空间冲突时!加载器会冻结当前暂时不运行的应用!让新加载的应用使用指定的地址空间

!

万方数据

相关文档
最新文档