微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 实时操作系统到Linux系统的移植

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

时间:05-11 来源:互联网 点击:

靠性

Linux作为一个unix兼容的操作系统代表着一个更加强大的应用和系统编程模型。应用程序执行在他们受保护的地址空间,因为它们之间的地址相互是不可见的,并且它们通过硬件的MMU来预防覆盖掉他们自己的代码,MMU出现在多数现代化的32位64位的处理器中。

当他们共享Linux内核的虚拟地址空间时,他们不能够覆盖内核代码或数据。既然进程不能够相互看到,他们就不能够相互破坏数据或代码

API和实时库

在开源标准以前,RTOS的制作者定义了他们自己的系统调用或API,这对于每个RTOS的制作者来说都是独一无二的。接口函数是为流行的编程语言而提供的,诸如c、c++,这使得API函数对于使用高级语言的程序员是合适的。

在过去的十年中,尽管只有POSIX规范的一部分和嵌入式应用程序相关,大多数的RTOS制作者还是给标准的POSIX提供了兼容库。很多客户使用他们自己的API集使本地RTOS接口分层以获得独立性和便捷性,而不是想被锁定成为一个私有的特殊版权的接口。

开发人员使用标准的API建立应用程序来获得两个另外的目的:允许代码被移植成像Linux那样的标准操作系统以及允许以后同样的代码在这样的一个环境下比使用私有的API更加容易移植。

很多包括标准调用的商业RTOS以POSIX或者BSD来设定,但是那些API经常只存在于windows下。特别是一个内核私有的API是最常被使用的,就是这些API锁定了项目到一个特殊的平台或者解决方案。

如果开发人员正在移植标准的代码或者考虑哪个API运用到新的代码中,那么理解在Linux和其他操作系统中使用的最普遍的标准是非常重要的。

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调试器的支持。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top