新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 实时操作系统到Linux系统的应用移植

实时操作系统到Linux系统的应用移植

作者: 时间:2016-10-08 来源:网络 收藏

POSIX

POSIX流行在基于UNIX的开源系统中、政府和军事舞台。然而POSIX对于传统的嵌入式实时系统几乎没有影响。POSIX标准家族起源于美国国家标准与技术研究所,现在有被归入IEEE、IEEE1003和其他标准的预兆。在过去的十年中,POSIX经历了多次的修订,最近的一次是在2000年。

兼容性和一致性是两个关于POSIX的重要观点。兼容性意味着一个特定的操作系统平台贯彻标准的一些子集,这种贯彻是备有文件证明的。甚至那些执行微小子集的平台能够兼容于POSIX标准。POSIX的一致性,相反的,代表了更加严格的标准,意味着一个操作系统服从于过去的已证明测试。

SVR4,BSD和其他UNIX的API

事实上SVR4和UNIX的BSD版本是流行的系统标准,这些标准对于Linux的影响是巨大的。Linux贯彻了那些UNIX API的大的子集(举个例子,对于共享内存、队列、信号量、BSD套接口和TCP/IP堆的Linux的ipc系统调用)。

熟悉SVR4、BSD,或者像AIX,HP-UX等其他通用的UNIX的开发人员对于Linux他们也能够很快的掌握。

c语言库

在嵌入式设计、RTOS或其他方面,很多API仅仅是标准c库,这些库或者是直接执行函数或者是作为系统调用的包装。Linux有熟悉的libc/glibc,尽管尺寸很大,但易于理解。

glibc的运行时间是对嵌入式应用程序内存尺寸的挑战。很多Linux的供应商为对于尺寸敏感的应用程序提供了经过裁减了的库。

RTOS接口层

RTOS的核心是对于进程间通讯调用的使用,这种调用提供了在任务中同步和通讯的机制。

表1提供了在典型的RTOS进程间通讯调用和同等的Linux调用之间的映射总结。

尽管在RTOS的调用和同等的Linux调用之间的映射是直接的,但是移植的工作量会被增加,如果使用仿真库,这种仿真库为其他RTOS移植过来的Linux应用程序提供了同样的调用接口。

对于Xenomai开源项目,这样的一个仿真技术是适用的。而这里,不同的仿真层提供给POSIX、VxWorks、VRTX和Itron这些被广泛使用的RTOS。注意,像很多开源项目,Xenomai和它的外壳是正在进行的工作,他们可能还没有完成或者还要进行修改。不过,它代表了一个在移植过程中潜在的高价值的出发点。

举个例子,POSIX模块主要是用来提供PSE51兼容的API.为了帮助移植其他PSE51兼容

API的应用程序,它包含了一些对于POSIX规范的扩展。

POSIX外壳已经包含了以下这些基本的特色:

线程

互斥量

信号量

条件变量

实时信号的支持

放弃和放弃处理

特殊线程数据

消息队列

定时器支持

共享内存

POSIX外壳创建实时线程,他们或是运行在Linux内核模块或者在用户空间的周期应用程序中。

实时内核的API允许内核和用户空间的编程。开发人员通常更喜欢在用户空间编程,因为他们之间的延迟小,特别是在硬件上,MMU的切换开销很小。目前为止在用户空间编程比直接从内核空间运行应用程序更为容易。在用户空间编程带来了内存保护和在这个环境中调试实时应用程序的GNU调试器的支持。

实时性能

也许对于嵌入式应用程序来说最重要的是满足实时的要求。对于设计RTOS使得它们及时响应来满足实时的要求,并且测量RTOS的系统调用,已经做了相当大的努力加以实现,因此开发人员能够确定系统的性能满足于实时的要求。RTOS的调用在一定意义上是循环的,应用程序和由RTOS提供的中断是同步的。因此进行一个同步调用花费RTOS的时间是中断处理时间的一部分。

在2002年以前,Linux的实时性比较差,而它的吞吐量特别是在网络方面比较好。然而那是吞吐量而不是实时性。原因是基本的Linux内核和unix应用框架。这些系统被设计成在应用程序开销的时候,内核执行它所需要的。其原因就是如果开发人员知道内核不会被一个异常中断抢占,内核的代码就更容易编写。

虽然这种方法被广泛使用于unix和早期的Linux中,但是近来有一个下降的趋势。它使得运行在多处理器体系的系统变得效率很低。同一时刻,非抢占式Linux使得Linux达到实时的标准变得困难,因为即使一个中断发生并且中断事件被调度运行,内核还会完成当前的任务。为了解决在多处理器系统的运行效率问题,Linux内核的开发人员开始侵入Linux内核的内部区域让它非抢占区域变得更小,以至于更多的内核区域在多处理器系统上能够并行的执行并且完成的更好。

那些对于改善Linux实时性有兴趣的人使用抢占的Linux内核来加速本地的实时响应。延迟减小到几百微秒到1毫秒之间。更多的性能提高包括缩短非抢占区域来减小那些区域带来的任何延迟。

自2002年以来,Linux已经支持实时应用程序。从那时起,Linux开发人员开始加强它的实时性能,标准Linux的实时性能在不断的提高。现在Linux的实时性能相当于大多数特有的实时内核。最近出现了对于Linux实时能力的重要推进,消耗CPU时间的同步机制的自旋锁被继承优先级互斥这种更可靠的同步机制替代了。互斥机制保证了cpu时间总是尽可能的分配给优先级最高的应用程序,从而更缩短了从中断到实时应用程序的过程。

最后一个主要的实时Linux的改进是将中断处理作为一个应用程序的标准来执行。以前Linux的设计赋予中断处理比任何其他应用程序更高的优先级。通过把中断处理作为一个普通的应用程序处理,一旦优先级更高的应用程序可以抢占比它优先级低的中断处理程序。

现在这些改变已经完成,性能和稳定性的改进使得Linux上的应用和以前基于传统的实时操作系统拥有一样的快速和稳定。

迈步向前

现在开发者正在放弃第一代实时操作系统,选择更稳定的一个开放式的嵌入式平台比如像Linux。移植这些传统的系统代表着挑战同时又提供了非常丰厚的投资回报。真正的风险不是放弃熟悉的环境,工具和API,而是当嵌入式系统开发不断前进时候,它却停滞不前。

遵循这篇文章概括的步骤和RTOS的移植技术, 开发人员可以通过最少的时间和精力成功地移植以前的RTOS的代码到一个现代化的Linux平台上来。


上一页 1 2 下一页

关键词:

评论


相关推荐

技术专区

关闭