论文摘要
嵌入式系统的广泛应用需要良好的软件系统支撑。随着嵌入式系统的深入发展,系统的可扩展能力已成为一个基本的需求,迫切需要一种机制能在运行状态下配置系统,也就是系统在运行状态下可以动态地添加模块,这种机制就是本论文要研究的动态加载机制。本论文讨论的动态加载机制是应用从零开始的加载机制。这样,系统只需要一个动态加载机制,就可以动态地加载模块以配置适合不同应用需要的嵌入式系统。本论文分析了目前存在的几种加载方式:基于Java的动态加载方式、嵌入式Linux的动态加载方式以及Windows的动态链接库原理,在此基础上提出了面向嵌入式应用的动态加载机制的原理和过程。加载,是指将特定格式的模块从外存或ROM甚至宿主开发环境装入内存并使之可以运行的过程。所谓动态加载,指的是,程序在运行期间需要调用某一模块的功能时,由加载器将该模块即时载入内存,进行相应的重定位处理后将控制权交还调用程序。动态加载机制运用动态链接的原理使得系统具有动态的加载和动态解析的能力,模块只有在被调用执行时才被链接入系统。动态加载分为下载、加载和卸载三个操作,其中下载完成从远程下载目标模块到本地,加载操作完成读入模块到内存,然后对模块未解决的外部引用进行解析(也就是符号解析和重定位)使之可以运行的过程。当模块不再使用时就从内存中卸载。本文首先以目标模块的生命周期为主线,在主线上侧重表现了目标模块的加载、处理、执行和卸载的过程,对动态加载技术涉及到的背景知识进行系统的分析和讨论,指出动态加载技术的关键和发展重点在于符号管理、符号解析和重定位技术,并对它们进行了较为全面的研究和分析。然后,针对这些关键问题给出了具体的实现方法。最后,在以上分析讨论的基础上提出了一种嵌入式系统的动态加载解决方案,描述了相关数据结构和算法,实现了函数原型,测试并验证了这一方案的可行性。