一种具有应用软件硬件地址无关性的操作系统实现方法与流程

文档序号:11323037阅读:1625来源:国知局
一种具有应用软件硬件地址无关性的操作系统实现方法与流程

本发明涉及一种具有应用软件硬件地址无关性的操作系统实现方法。



背景技术:

在不支持虚拟内存的嵌入式系统中,应用软件通常在编译、链接时须指定其代码和数据的装载硬件地址,如果把应用软件装在非指定地址,无法正确运行。

当前的嵌入式系统中,若其处理器不支持虚拟内存管理,其软件通常都是与硬件地址相关的,编译链接时就需要指定运行的硬件地址和数据区地址。即使使用了嵌入式操作系统,由于提供的系统调用是以普通函数调用方式实现,应用软件需要知道系统调用函数的地址,所以其应用软件部分也与硬件的地址相关。实际上,这样的嵌入式系统往往是底层硬件驱动代码和应用代码是一起编译,生成一个可发布的软件文件。

应用软件不能做到与硬件无关,当底层硬件变化时,需要重新编译生成整个嵌入式系统软件,重新发布。加大了软件的测试、验证、发布的成本。尤其在安全相关领域,对应用控制软件要求高,监管严,更换应用控制软件的监管、审查成本很高,仅因为硬件的一些器件代换、升级引起软件重新发布,就会带来对整个软件系统的重新审查,大大提高了该系统更新、发展的成本。



技术实现要素:

本发明提供一种具有应用软件硬件地址无关性的操作系统实现方法,以解决现有技术存在的问题。

本发明采用以下技术方案:

具有应用软件硬件地址无关性的操作系统实现方法,

将应用软件以地址无关的方式编译生成;

对不支持虚拟内存管理的嵌入式系统,设置具有硬件地址无关性的系统调用;

操作系统通过读取应用软件的配置信息,启动应用软件;应用软件通过调用硬件地址无关性的系统调用,与硬件资源进行信息交互。

所述嵌入式系统提供的具有硬件地址无关性的系统调用,通过软件中断方式实现:

嵌入式系统提供的不同系统调用对应软件中断不同的中断号,应用软件需要调用系统调用时,通过引发软件中断,将中断号及相应的系统调用所需要的参数传入操作系统内核;

操作系统内核中的软件中断服务程序取出中断号及传入的参数,跳转至相应的系统调用函数并执行,函数执行结果返回给应用软件。

所述的信息交互是指应用软件获取硬件资源提供的信息,或者应用软件向外发送信号。

所述操作系统根据应用软件配置信息为应用软件分配其所需资源,将应用软件的代码加载至运行位置,启动应用软件运行;如果应用软件在其安装的位置运行,则不再进行加载,直接启动应用软件;

所述将应用软件的代码加载至运行位置是指由存储位置拷贝到运行位置。

所述将应用软件的代码加载至运行位置并启动应用软件运行后,能够进行代码的完整性、合法性检查。

本发明的有益效果:使用本方法构建的嵌入式软件系统,实现了嵌入式应用控制软件的完全硬件无关性,可以实现应用软件与硬件平台支持软件分别发布,对嵌入式系统软件的开发、测试,尤其是硬件平台改进升级工作,可以降低成本,提高效率。

附图说明

图1为本发明的流程图。

图2为本发明的软件架构图。

图3为软中断调用示意图。

具体实施方式

下面结合附图和具体实施方式对本发明作进一步详细说明。

应用软件硬件地址无关性,是指应用软件不限制其所装载、运行位置的硬件地址,能正确的执行。

本发明针对不支持虚拟内存管理的嵌入式系统,无法通过现有的方式实现应用软件完全硬件地址无关、独立发布运行的问题,提出的一种解决方案,可实现应用软件与底层软件(操作系统、驱动程序)独立更新,即首先可实现应用与底层支持系统可分别升级更新,无需全部软件重新编译、更新;其次,可实现不更改原有软件情况下,通过增加应用软件,提供新的功能。

具体包括:

将应用软件以地址无关的方式编译生成。

对不支持虚拟内存管理的嵌入式系统,设置具有硬件地址无关性的系统调用。

应用软件通过调用硬件地址无关性的系统调用,进行信息交互。

即,本发明的嵌入式软件操作系统以嵌入式操作系统加应用软件的架构方式设计,两部分分别编译、链接、发布。

应用软件必须以地址无关方式编译生成。当前通常的编译器均支持地址无关方式编译,如arm编译器提供-ropi、-rwpi编译选项用于编译生成与具体硬件地址无关的执行代码。如gcc编译器提供-fpic选项生成地址无关的执行代码。

对不支持虚拟内存管理的嵌入式系统,提供具有硬件地址无关性的系统调用。比如本实施方式以软件中断方式实现系统调用。操作系统提供的不同系统调用对应软件中断不同的中断号。应用软件需要调用系统调用时,引发软件中断,通过堆栈将中断号及相应系统调用需要的参数传入操作系统内核。操作系统内核中的软件中断服务程序取出中断号及传入的参数,跳转至相应的系统调用函数并执行,函数执行结果返回给应用软件。此种方式中,应用软件只需要知道操作系统提供的系统调用号(即软中断号),即可通过系统调用实现对硬件部件的访问,无需知道系统调用函数的具体地址。

而在一个软件运行中,可粗略分为两种地址相关情况:其一是自身内部各函数及数据存储位置的地址,其二是调用外部函数的具体地址。本发明中,自身内部地址通过硬件地址无关的方式编译实现,数据区的基址在加载运行应用程序前已指定,内部访问都是以相对基址位置访问,这样就实现了应用软件自身内部代码与硬件地址的无关性。而调用外部函数的具体地址,本发明中指的是上述的系统调用,通过软中断方式实现地址无关性。

如前所述,应用软件通过操作系统提供的系统调用接口交互信息,完成其功能。而上述的交互信息是指:1.应用软件获取硬件资源提供的信息,包括采集信息、通信数据等等,2.应用软件向硬件资源发送命令、数据等等。

本发明中,操作系统通过读取应用软件配置信息,启动应用软件运行。应用软件配置信息,可以采用启动脚本或自定义格式的二进制文件描述应用软件存储位置、运行位置、运行资源要求相关信息,比如应用软件的大小、存储位置、运行位置,数据段基址等,信息的内容依据嵌入式系统具体情况而定。操作系统通过指定的位置或约定的文件名(使用文件系统时)读取应用软件配置信息。操作系统根据应用软件配置信息为应用软件分配其所需资源,加载至运行位置,设置其数据段基址等,然后可启动应用软件运行。如应用软件在其安装的位置运行,则加载步骤可省略。该加载指应用软件代码加载到运行位置。某些系统中软件的存储位置不能运行代码,需要把应用软件加载到能运行代码的存储器中。比如应用程序存储在nandflash中,此位置不能执行代码,需要把应用软件加载到ram中运行。

由于本发明中应用软件具有地址无关性,其加载过程只是由存储位置拷贝到运行位置,并不进行代码的重定位。运行位置代码与执行位置代码内容是相同的,只是存储位置变化而已。因无需进行重定位,可获得在运行中对代码的完整性、合法性进行检查的有益效果。而如果进行了重定位,运行代码发生了变化,显然不能进行运行时的此类检查。上述对代码完整性、合法性的检查,是现有的对代码进行检查的方法。当软件需要重定位后再运行时,现有的检查方法只能在加载过程中或加载前进行,不能在运行过程中进行,因为进行重定位,导致运行代码发生变化,无法在运行中进行此类检查。

本发明中的操作系统提供的系统调用是对嵌入式系统硬件资源的抽象,调用参数不涉及具体硬件信息。通过系统调用完全屏蔽了具体的硬件信息,从而使应用软件具有完全的硬件无关性。

作为通过系统调用屏蔽具体硬件信息的具体实施例,例如一个嵌入式系统中要使用can总线进行通信,此时,硬件对象是假定的嵌入式系统中的can总线控制器。应用本发明的方法,首先在操作系统和设备驱动中以资源名建立设备的操作集,应用软件以资源名通过系统调用找到相应的操作集,调用设备操作,完成对设备的访问。例如,对can控制器资源可命名资源名can0、can1等等,抽象出can的操作例如打开、读、写等,这些操作以某种形式挂载在以资源名为标识的数据结构上,应用软件以资源名访问can设备,由系统调用访问can设备的驱动程序完成具体的操作。应用软件代码不涉及具体设备的具体信息(如寄存器地址、位定义等),具有硬件无关性,更换can控制器并不影响应用软件。此过程中,系统调用访问设备驱动的方式不限定,使用现有的方式均可,系统调用和设备驱动是编译在一起的。

采用上述方法,实现应用软件对硬件具体信息的无关性,具体硬件变化时,无须修改应用软件。

使用本方法构建的嵌入式软件系统,实现了嵌入式应用控制软件的完全硬件无关性,可以实现应用软件与硬件平台支持软件分别发布,对嵌入式系统软件的开发、测试,尤其是硬件平台改进升级工作,可以降低成本,提高效率。另外通过应用配置信息,可方便调整嵌入式系统提供的应用功能。

以上所述的仅是本发明的优选实施方式,应当指出,对于本领域的技术人员来说,在不脱离本发明整体构思前提下,还可以作出若干改变和改进,这些也应该视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1