论文部分内容阅读
随着计算机技术和网络的飞速发展,嵌入式系统获得了大范围的应用。嵌入式系统的客户端程序可以运行在嵌入式系统中,也可以运行在嵌入式系统以外的其他系统中并通过API来调用嵌入式系统所提供的功能。在为嵌入式系统编写软件时,如何让处于不同地域,运行在不同系统上的客户端程序用统一的方式来调用嵌入式系统提供的功能成为一个重要的课题。简单来说,本文主要的研究目标是让嵌入式系统中的基于C语言的API函数可以在嵌入式系统外的任何其他异构系统中或者在嵌入式系统的任何进程中以和本地调用完全一样的函数调用方式被调用。这也即本文所要讨论的统一调用框架。远程过程调用(RPC)为这种客户端/服务器模式提供了便利。在保持调用语义和本地调用一致的情况下,客户端不必知道自己和服务的提供者(嵌入式系统提供的功能)是否处于同一进程或是同一系统。因此采用RPC作为嵌入式系统提供服务的接口是一个理想的选择。本文基于对RPC原理的研究和分析,提出了一种多平台RPC统一调用框架并加以实现。该统一调用框架基于以精简CORBA为基础实现的RPC调用,采用Flick开源IDL编译器生成客户端和服务端存根代码。在RPC的实现上基于Flick的运行时库,并在此基础上进行了扩展,使得对嵌入式系统软件API的RPC调用可发生在该嵌入式系统的不同进程中,也可发生在由网络连接的另一台主机的一个进程中。为了使RPC调用能在多平台上发起,在运行时库的实现上选择Socket作为数据传输的原语。为了使运行时库的实现和操作系统无关,引入了操作系统抽象层OSAL并将Socket相关的操作封装在这一抽象层中。操作系统抽象层可以对Linux和Windows分别有不同的实现使得RPC运行时库的实现本身无需知道其下所运行的具体操作系统,从而可进一步提高RPC统一调用框架的跨平台特性。最后针对一些具体应用场景进行了测试和分析,实验结果验证了所提出的统一调用框架的有效性和适用性。该统一调用框架的创新之处在于编写的客户端程序几乎可以不加修改地在各种异构硬件系统(硬件平台)和不同的操作系统(软件平台)之间移植。嵌入式系统软件开发者可以致力于将嵌入式系统的能力通过API形式向软件开发者提供。而嵌入式应用软件开发者则可以致力于在各种平台和环境下开发和嵌入式系统相关的应用。这样可以大大增加该嵌入式系统软件的应用领域,扩展可能的应用场景。该RPC统一调用框架在本人所在的公司中已经有Linux下的初步应用,硬件上包括ARM和Intel平台。未来还计划在Windows平台上增加相关应用。