|
楼主 |
发表于 2016-5-2 11:46:05
|
显示全部楼层
实时linux系统
real time linux os
开源的实时linux系统有很多,如RTAI、xenomai、RT-Linux、adeos
0,linux实时性能比较
0.1,强实时应用环境下VxWorks, Linux, RTAI和Xenomai系统的性能比较
http://wenku.baidu.com/link?url= ... uSYQ3sAhAylkWGCI7za
无重调度的测量延迟和抖动
system linux RTAI Xenomai VxWorks
Jitter(us) 0.4 0.15 0.25 0.5
Delay(us) 72.8 71.8 73.2 69.2
有实时网络通信的测量延迟(RTAI和Xenomai都使用RTnet IP栈,linux和vxworks使用本地ip栈)
system linux RTAI Xenomai VxWorks
Jitter(us) 11.1 3 3.3 20.4
Delay(us) 113 101 104.5 156.5
本篇文章的目的是为了评估Linux实时解决方案替代RFX-mod目前正在使用的VxWorks的可能性。基于性能测定的结果,我们可以得到以下结论:
当前Linux 2.6内核的性能非常好,在小的专用系统是可以接受的。但RFX-mod的反馈控制系统并非如此,涉及的控制单元要处理高数据吞吐量的输入/输出和网络通信。 RTAI和Xenomai都值得考虑。
Xenomai的性能表现略次于RTAI,主要是因为它分层的方法在中断管理中引入一些开销。另一方面,Xenomai结构化更优,很多平台可以使用。此外,Xenomai提供一组模拟层,这在大型系统的移植中会非常有用。
RTAI和Xenomai在软件开发时用户友好都不及VxWorks。因为实时任务要在内核模式执行以实现最佳性能,程序员不能使用通常在用户空间可用的系统服务,调试变得非常困难。然而,对于Xenomai和RTAI,让用户进程成为实时却是可能的。允许实时应用用户进程的开发简化了实时系统程序开发也允许IPC Linux标准进程。实时用户进程靠一个与Linux调度器协同工作的专门的调度程序进行管理,当用户进程需要实时性时,窃取它们。与内核进程不同,为用户
进程进行上下文转换需要重新映射页表,这是一个潜在的耗时的操作。因为这个原因我们计划进一步测试量化MMU重新映射对上下文切换的影响。
网络性能是对RTAI和Xenomai最有利的支持。UDP已成功用于实时网络通信。RTnet被证实是一种良好的解决方案,尤其是的与目标板的最新版VxWorks IP堆栈的不良性能给我们的用户体验相比的时候。
RTnet只在不使能TDMA时可以达到最佳性能,这似乎最适合有大量接入点但是没有严格时间要求的系统(访问冲突的机率更高)。RFX-mod并不是运行在这样的环境下,只有不到10个控制单元。
因此我们可以说,RTAI和Xenomai都可以在RFX-mod,或者更广泛的说,在聚变装置的实时控制系统有效替代VxWorks。
参考文献
[1] A. Luchetta and G. Manduchi, ―RFX数字反馈控制的总体构架,实现和性能‖ IEEE Trans. Nucl. Sci., vol. 47, pp. 186–191, 2000.
[2] M. Cavinato, G. Manduchi, A. Luchetta, and C. Taliercio, ―核聚变实验中一般目的的实时控制框架‖ Trans. Nucl. Sci., vol. 53, pp. 1002–1008, 2006.
[3] Wind River 主页, [在线].可访问: http: www.windriver.com.
[4] J. A. Stillerman, M. Ferrara, T. W. Fredian, and S. M. Wolfe, ―Alcator C-Mod 数字实时等离子体控制系统‖ Fus. Eng. Des., vol. 81, pp. 1905–1910, 2006.
[5] B. G. Penaflor, J. R. Ferron, M. L. Walker, D. A. Piglowski, and R. D. Johnson, ―使用一个Linuxα的计算集群对DIII-D等离子放电进行实时控制‖ Fus. Eng. Des., vol. 56-57, pp. 739–742, 2001.
[6] RTAI主页, [在线]. 可访问: http:// www.rtai.org.
0.2,LinuxCNC延迟与抖动测试
Latency-test comes with LinuxCNC, you can run it with 'latency-test' from the prompt. For details, see WhatLatencyTestDoes.
http://wiki.linuxcnc.org/cgi-bin/wiki.pl?Latency-Test
1,RTAI 和 RTAI-lab
RTAI - Real Time Application Interface Official Website
This is the homepage of RTAI - the RealTime Application Interface for Linux - which lets you write applications with strict timing constraints for your favourite operating system. Like Linux itself this software is a community effort. If you are interested in what it does just join our mailing list and help our team!
RTAI supports several architectures:
x86 (with and without FPU and TSC)
x86_64
PowerPC
ARM (StrongARM; ARM7: clps711x-family, Cirrus Logic EP7xxx, CS89712, PXA25x)
m68k (supporting both MMU and NOMMU cpus)
The RTAI distribution includes RTAI-Lab, a tool chain to convert block diagrams into RTAI executables and to monitor their operation on various targets.
2016.05.02访问https://www.rtai.org/看到这些资料,同日不能访问www.comedi.org
About RTAI-Lab
RTAI-Lab是一个工具链,它能编译scilab/scicoslab或matlab/simulink/rtw开发的块图成为在RTAI实时linux系统上运行的程序。RTAI-Lab被包括在RTAI分发包中。
The RTAI-Lab project provides a tool chain to develop block diagrams that can be compiled and executed on the RTAI real-time Linux operating system. RTAI-Lab is included in the RTAI distribution.
Block diagrams can be developed using either Scilab/Scicos (Open Source) or Matlab/Simulink/RTW (commercial).
See also:
RTAI-Lab tutorial for Scilab/Scicos and Linux
[PDF], [Tar archive with files]
Instructions to port Matlab/Simulink diagrams to RTAI:
RTAI-TARGET-HOWTO
RTAI-Lab repository
RTAI-Lab main features
Adds RTAI-Lib palette of RTAI blocks to Scicos to develop real-time block diagrams
Enables host and target systems to communicate via net_rpc
xrtailab virtual oscilloscope and monitoring application lets you interact with the real-time executable
Automatic real-time code generation from Scilab/Scicos
Possibility to port Matlab/Simulink/Real-Time Workshop projects to RTAI
Interfaces to signal acquisition hardware and other devices supported by Comedi
RTAI-Lab bug reports
To report bugs, ask questions, or submit improvements contact roberto.bucher at supsi.ch.For bug reports please provide Linux kernel version, RTAI version, RTAI patch number, CPU type, data acqusition hardware type, Scilab version, gcc/g++/cpp versions, the block diagram that may cause the bug (.cos file), outputs using verbose option "-v", and possibly kernel logs resulting from "tail -f /var/log/syslog".
RTAI-Lab project leaders
Roberto Bucher, roberto.bucher at supsi.ch
Lorenzo Dozio, dozio at aero.polimi.it
关于RTAI-TARGET-HOWTO
安装步骤文档在https://www.rtai.org/userfiles/d ... AI-TARGET-HOWTO.txt
其中STEP 7 - Download and install the MESA library
Mesa 3D是一个在MIT许可证下开放源代码的三维计算机图形库,以开源形式实现了OpenGL的应用程序接口。
OpenGL的高效实现一般依赖于显示设备厂商提供的硬件,而Mesa 3D是一个纯基于软件的图形应用程序接口。由于许可证的原因,它只声称是一个“类似”于OpenGL的应用程序接口。由于Mesa 3D的api是和opengl 相同,具体的opengl版本浏览Mesa 3D官方网站,我们可以这么认为它就是opengl的软件模拟gpu光栅处理器的一个实现。我们知道如果要实现一个opengl,其本身是一个设备器,不能实现窗体的透明,如果我想要实现窗体透明,又想要有3D的应用,可以试试它。
Mesa是个类似OPENGL的应用程序接口,它可以在Unix/X11上运行,可以支持3dfx Voodoo1, Voodoo2, Voodoo Rush, Voodoo Banshee, Voodoo3,Matrox G200/G400, nVidia RIVA, ATI Rage Pro, Intel i810 on Linux和NVIDIA的RIVA系列显示卡。玩3D游戏的好帮手。
Mesa is an open-source OpenGL implementation, continually updated to support the latest OpenGL specification.
The Direct Rendering Infrastructure, also known as the DRI, is a framework for allowing direct access to graphics hardware under the X Window System in a safe and efficient manner. It includes changes to the X server, to several client libraries, and to the kernel (DRM, Direct Rendering Manager). The most important use for the DRI is to create fast OpenGL implementations providing hardware acceleration for Mesa. Several 3D accelerated drivers have been written to the DRI specification, including drivers for chipsets produced by 3DFX, AMD (formerly ATI), Intel and Matrox.
STEP 8 - Download and install the EFLTK package
EDE,A light desktop environment for UNIX operating systems. 见https://sourceforge.net/projects/ede/files/efltk/
http://osdir.com/ml/lib.fltk.general/2004-08/msg00341.html
Jamiil wrote:
> Hi!
> Does anyone know what is eFLTK? and where can I get a doc for it?
>
> TIA
>
eFLTK is dead project. But still, there are a lot of good things there -
nice widgets, database classes, net classes, utf8 etc.
As eFLTK developer I can say only one thing - now when FLTK team is focused
more on FLTK2, there is no need for eFLTK. FLTK2 (almost) matches eFLTK
developers visions.
Best regards
Dejan
--
Dejan Lekic
developer, sysadmin and DBA
http://dejan.lekic.org
2,comedi
comedi提供了驱动程序、库函数和API来与信号采集硬件交互,支持292种硬件。
Introduction
The Comedi project develops open-source drivers, tools, and libraries for data acquisition.
Comedi is a collection of drivers for a variety of common data acquisition plug-in boards. The drivers are implemented as a core Linux kernel module providing common functionality and individual low-level driver modules.
Comedilib is a user-space library that provides a developer-friendly interface to Comedi devices. Included in the Comedilib distribution is documentation, configuration and calibration utilities, and demonstration programs.
Kcomedilib is a Linux kernel module (distributed with Comedi) that provides the same interface as Comedilib in kernel space, suitable for real-time tasks. It is effectively a "kernel library" for using Comedi from real-time tasks.
Features
Integrated real-time support for most hardware
High-level library (comedilib)
Application-level device independence
Works with Linux 2.0, 2.2, and 2.4 kernels
Latest version
(probably not accurate!)
comedi-0.7.45
comedilib-0.7.9
Comedi and Comedilib are being actively developed, and because of this, new versions are sometimes buggy. However, reported bugs are usually quickly fixed.
Maintainer
David Schleef
ds@schleef.org
Much of Comedi has been developed by others, suggesting the need for a contributors list.
2016.05.02访问http://stm.lbl.gov/comedi/看到这些资料,同日不能访问www.comedi.org
3,NMT RT-linux
http://blog.csdn.net/kendiv/article/details/589724
已经实现的Real-Time Linux简介
Real-Time Linux主要有二个大类:
第一类以NMT RT-Linux为代表,它们的实时进程实际上是一个核心模块。所以它们事实上是一种Real-Time驱动程序,RTAI及网络系统与之有很相似的结构,差别只是在于其驱动的硬件类别不同而已。
第二类如KURT,Linux/RK及RED-Linux等,这些系统的系统响应时间受限于PC能达到的时间分辨率。虽然RED-Linux已经把这个极限推到1ms左右,但可以预期在PC的架构下要达到100us以下是很困难的。也就是说,对于要求10K
以上频率的应用是不可能使用这种架构来达成。
3.1. NMT RT-Linux
NMT是新墨西哥科技大学(New Mexico Technology)的缩写。这一套系统可以说是最早的获得成功的Real-Time Linux,它目前已发展到3.0版。这个系统是由Victor Yodaiken和它的学生Michael Barabanov所完成。这个系统的概念是“架空”Linux内核,使得Real-Time进程得以尽快的被执行。
事实上,RT-Linux中的实时任务(Real-Time Task) 其实并不是 一个Linux的进程,而是一个 Linux 的可加载式核心模块(Loadable Kernel Module)。NMT RT-Linux采用一个比较简单的做法,它不使用Linux的任何功能,把需要高度时间精确度的工作写成一个驱动程序,然后直接用PC时序芯片 (Timer Chip) 所产生的中断调用这个驱动程序。这样,它就可以绕开Linux的中断机制,从而使系统响应时间大缩短。
从这个角度看,NMT RT-Linux 其实是一个实时驱动程序,算不上是真正的 Real-Time Linux。但由于它出现得早,且其架构很符合自动控制的需求,使用者非常的多,且多半是有关自动控制的应用。
下文对这个系统将会有更详细的论述。
3.2. RTAI 最小延迟15us
RTAI是 Real-Time Application Interface 的缩写。顾名思义知道它是一套可以用来写实时应用程序的接口。大致而言,RTAI和NMT RT-Linux是相同的东西。它同样的“架空”了Linux,而直接用可加载式核心模块( Loadable Kernel Module)实现实时进程。每一个实时进程实际上就是一个可加载式核心模块。
RTAI和NMT RT-Linux 最大的不同地方在于它非常小心的在Linux上定义了 一组实时硬件抽象层(Real-Time Hardware Abstraction Layer)。RTHAL将RTAI 需要在Linux中修改的部份定义成一组程序接口,RTAI只使用这组接口和Linux沟通。这样做的好处在于我们可以将直接修改Linux核心的程序代码减至最小,这使得将 RTHAL 移植到新版 Linux 的工作量减至最低。
RTAI 采取这种途径最大的原因在于NMT RT-Linux在由2.0版移植至2.2版的过程中遇到问题,使得基于2.2版核心的NMT RT-Linux一直无法完成。所以在Dipartimento di Ingegneria Aerospaziale Politecnico di Milano的Paolo Mantegazza和他的同事们就决定自行做移植的工作,由于NMT RT-Linux的困境他们认识到必须采取上述的途径以解决将来可能再度面临的兼容性问题。
于是 RTAI 便诞生了,它是一个比 NMT RT-Linux 更好的 NMT RT-Linux,虽然后来NMT RT-Linux也随后完成移植的工作,但那已经是RTAI诞生半年以后的事了。
3.3. LXRT
由于 RTAI 无法直接使用Linux的系统调用,解决的方法是使用RT-FIFO将一个RTAI Real-Time Kernel Module和真正的Linux进程连接在一起,由这个进程负责为其调用Linux系统调用。似乎其友善性得到提高,但代价是“实时性”降低了,这时实时任务不再能进行任何抢先式操作(而“抢先式”被认为是实时系统最佳的方式),所以实时系统的优势就不再具有了。
3.4. KURT http://www.ittc.ku.edu/kurt/
KURT是由Kansas大学所创造的系统,它和NMT RT-Linux及RTAI有很大的不同。KURT是第一个可以使用系统调用的Real-Time Linux。由于KURT只是简单的将 Linux 的进程管理器用一个很简单的时间驱动式(Time Driven)进程管理器加以取代,实时进程的执行很容易很其它非实时进程的影响。KURT直接修改Linux内核,增加Linux的抢占机制(Linux抢占机制最早是在linux 2.6版本中实现)以及改变Linux调度策略。前期的时候,Linux的时钟调度中断频率是100HZ,也就是说任务的请求调度延迟是10ms,这也就是Linux为什么不支持实时调度的原因。在KURT中,Linux采用了新的更灵活的调度机制,它不再受100HZ的限制,可以根据任务的优先级,中断的优先级任务而调用实时任务。KURT是支持软实时任务调度的。
3.5. RED-Linux 最小延迟100us
这是加州大学Irvine分校所做的系统,它和KURT类似,是一个可以使用所以Linux系统调用的Real-Time Linux。它的特点是使用“抢先检查点 (preemption point)”改善系统的反应速度。前面说过KURT的最大问题在于它受限于原有的Linux架构,使得系统的反应时间很难控制。然而在RED-Linux这一点已经被大大的改善,其2.0版的反应延迟约在100 us左右。
RED-Linux 非常有弹性的进程管理器架构也是其特点之一。它使得RED-Linux可以符合各种不同复杂度系统的需求。它将进程管理分成Dispartcher和Allocator二部份,Dispatcher在核心中执行而Allocator在用户模式执行。Allocator可以是应用程序的一部份,也可以是一个独立的单位。通常它负责将应用程序的资源请求转换成内核可以解释的格式。
4,OSADL
https://www.osadl.org/Realtime-L ... altime-linux.0.html
5, RTLCP
http://collabprojects.linuxfoundation.org/
2015年10月5日至7日在都柏林举办的 Linux 大会(LinuxCon 2015)上,Linux 基金会宣布了又一个协作项目 —— Real Time Linux 协作项目(Real Time Linux Collaborative Project ,RTLCP)。
RTLCP 的一个主要目标是推动关键代码上游审查,最终合并到 Linux 内核主线并得到持续地支持。
RTL 内核在支持其它大规模架构实时 Linux 上同样也有优势。它可以从主线内核中利用Linux 设备驱动,文件系统等等。实时的特性让它可以控制一些对时间敏感的应用上使用,例如机器人,数据采集系统,制造工厂,医药工业等。Linux 基金会表示, RTL 将聚集工业领导者和专家来发展这项技术。
Google 是 RTL 的创始白金会员,黄金会员包括美国国家仪器,OSADL 和德州仪器,白银会员包括 Altera 公司,ARM,英特尔和 IBM。
6, L4/Fiasco http://os.inf.tu-dresden.de/L4
L4/Fiasco系统是完全不同与RTLinux和RTAI机制的实时系统,它可以支持软实时任务调度。L4最先由Jochen Liedtke开发的第二代微内核。目前,它已经变成了第二代微内核的一个标准,基于这个标准,有很多L4 API的实现。其中一个实现就是Fiasco,它是在德国德累斯顿大学开发的。为了强调Fiasco跟L4之间的这种关系,我们把Fiasco一般称L4/Fiasco。L4/Fiasco与其它L4的实现不同的是L4/Fiasco是一个具有实时特性的微内核,L4/Fiasco是DROPS项目的一个核心子项目,它同时提供了很多软件包,以方便基于L4/Fiasco的程序设计。因为L4/Fiasco是具有实时功能的微内核,而在实时程序的设计中,一般可以分为实时任务和非实时任务。对于使在L4/Fiasco上运行非实时任务的程序可以兼容Linux程序,设计者们修改了Linux内核,使得整个Linux可以运行在L4/Fiasco之上。目前L4Linux的最新版本是基于Linux-2.6.18的。
7,XtratuM http://www.xtratum.org
XtratuM是我们介绍的Real-Time Linux系统中最年轻的一个,2003年XtratuM-0.1版本的发布标志者XtratuM的诞生,到现在为止,XtratuM共发布了三个版本XtratuM-0.1,XtratuM-0.3和刚刚发布的XtratuM-1.0。XtratuM与上面列举的real-time linux系统的最大不同之处是XtratuM采用超微内核设计理念,它从影响实时系统性能最重要的两个方面中断和定时器着手,建立一个超微的系统内核,实现对中断和定时器的虚拟。从而使上层系统,例如Linux,RTLinux系统以域(domain)的方式运行。内存分离的保护机制提高了系统的安全性,Linux做为最低优先级的域只有在无实时任务的时候调用。域和域之间可以通过FIFO或者SHM(Share Memory)通信。从另一个角度看,XtratuM是一个实时虚拟机,它可以直接运行在底层硬件上,并且向上层系统提供标准的中断、时钟接口。从而提高了上层系统的可移植性。当前RTLinux社区正在将RTLInux移植到XtratuM上面。
http://www.xtratum.org/main/projects
8,linux 2.6.22 https://www.kernel.org/pub/linux/kernel/projects/rt/
The Real Time Preempt Patch:
Index of /pub/linux/kernel/projects/rt -
2.6.22/ 08-Aug-2013 18:24 -
9,MontaVista linux
MontaVista正在为Linux增添实时功能,提高其速度,使其更强壮,其目的是使Linux能够在瞬间可靠地处理数据和发布结果。MontaVista的首席执行官吉姆说,新软件是一大进步,它极大地提高了Linux的吸引力。
Linux最初在服务器上获得了成功,现在已经在向包括手机和家庭网络工具在内的各类设备蔓延。它在对实时处理要求较高的设备中还不太普及,对实时处理要求较高的设备的二个例子是:汽车引擎电子设备、导弹导航系统。
10,LynxOS
LynxOS是一个分布式、嵌入式、可规模扩展的实时操作系统,它遵循POSIX.1a、POSIX.1b和POSIX.1c标准。它最早开发于1988年。
LynuxWorks等其它公司也在销售实时版本的Linux。吉姆说,这些公司通常是在Linux上再开发一个独立的实时操作系统,在Linux中增添内置的实时功能则有很大不同之处,这可能使嵌入式Linux的市场翻一番而达到30亿美元。
Wind River的营销总监约翰表示,Linux最终将有强大的实时功能,但MontaVista的方法是错误的:它采用了非标准的代码。约翰认为MontaVista的软件是“专有版Linux”,与Linux社区没有任何联系。它带来的问题比解决的问题还要多。他说,因为MontaVista的功能不是标准Linux的一部分,因此买主将被捆绑到MontaVista的版本上。这与Linux的主要目的之一是相违背的:得到各大高科技厂商支持的业界标准。很少有Linux公司的规模能够提供非标准版本Linux所需要的支持。
11,QNX
QNX是一个分布式、嵌入式、可规模扩展的实时操作系统。它遵循POSIX.1 (程序接口)和POSIX.2 (Shell和工具)、部分遵循POSIX.1b(实时扩展)。它最早开发于1980年,到现在已相当成熟。
12,Xenomai
产品定义
Xenomai 是一种采用双内核机制的Linux 内核的强实时扩展。由于Linux 内核本身的实现方式和复杂度,使得Linux 本身不能使用于强实时应用。在双内核技术下,存在一个支持强实时的微内核,它与Linux 内核共同运行于硬件平台上,实时内核的
优先级高于Linux 内核,它负责处理系统的实时任务,而Linux 则负责处理非实时任务,只有当实时内核不再有实时任务需要处理的时候,Linux 内核才能得到运行的机会。
Xenomai 基于Adeos(Adaptive Domain Environment for Operating System)实现双内核机制,图3.1 显示了Xenomai、Adeos 和Linux 这三个软件实体之间的相互关系。Adeos 是扩展Linux 的基础环境,有必要对其做一个较详细的介绍。
产品简介
Adeos 的设计目标是为操作系统提供一个灵活的、可扩展的自适应环境,在这个环境下,多个相同或不同的操作系统可以共存,共享硬件资源。目前,Adeos 是基于Linux 内核实现的,主要的应用是在Linux 的实时化方面,使基于Linux 的系统能满足强实时的要求(例如Xenomai 和RTAI3.2 以上版本都是基于Adeos 实现的)。在基于Adeos 的系统中,每个操作系统都是在独立的域内运行(但不一定所有的域实现的都是操作系统,也可以是完成其它功能的软件实体),每个域可以有独立的地址空间和类似于进程、虚拟内存等的软件抽象层,而且这些资源也可以由不同的域共享。
对于一个计算机系统来说,系统的运行是由内部和外部的中断和异常所触发的,例如系统时钟中断对操作系统来说就是最重要的。所以,Adeos 的主要工作就是管理硬件的中断,根据域的优先级依次执行相应域的中断服务程序,从而驱动域内的系统运行;同时,Adeos 还提供域之间的通信机制实现域的调度等。
为了实现对中断的管理和域之间的优先级控制,Adeos 使用了中断管道(Interrupt Pipe)的概念。Adeos 通过中断管道在不同的域之间传播中断,而且提供了相应的机制可以让域改变自己在中断管道中的优先级。
Xenomai 在Adeos 系统中的域优先级高于Linux 域,每当中断到来之后,Adeos先调度Xenomai 对该中断进行处理、执行中断相应的实时任务,只有当Xenomai 没有实时任务和中断需要处理的时候,Adeos 才会调度Linux 运行,这就保证了Xenomai的中断响应速度和实时任务不受Linux 的影响,从而提供了实时系统的可确定性。
Xenomai 实时内核为开发强实时应用提供了丰富的功能,主要包括实时线程调度与管理、用户空间实时任务支持、线程同步服务、时钟服务、中断服务、动态内存申请和实时对象注册服务等。
Xenomai简介及其Adeos实现
Xenomai是一个自由软件项目,提供了一个基于Linux的实时解决方案。它可以提供工业级RTOS的性能,而且完全遵守GNU/Linux自由软件协议。目前最新稳定版本是2.4.5。
Xenomai项目起始于2001年。从2003年夏天起,Xenomai和RTAI有了两年时间的合作,期间开发了广为人知的RTAI/fusion项目分支。到2005年,Xenomai项目又重新独立出来。而从2.0.0版本开始,Xenomai在硬件平台的移植就一直是基于Adeos构架来实现的。
在基于Adeos的系统中,分为多个域。每个域中独立运行一个操作系统(或者是实现一定功能的程序模块),每个域可以有独立的地址空间和类似于进程、虚拟内存等的软件抽象层。在各个域下层有一个Adeos通过虚拟中断等方法来调度上面的各个域。在基于Adeos的系统中,存在着A、B、C、D四种类型的交互,如图1所示。
A类交互是各个域直接操作硬件设备,包括访问内存等;B类交互指当Adeos接收到硬件中断后,会根据中断来对相应的域进行中断服务;C类交互指当前域内的操作系统主动向Adeos请求某些服务;D类交互是指Adeos接收硬件产生的中断和异常,同时也可以直接控制硬件。其中,Adeos实现的功能主要包括中断管道机制(I—Pipe)、域管理模块和域调度模块功能。
Xenomai用户层实时的实现
Xenomai除了在内核层利用Adeos实现了硬实时外,它在用户空间也有很好的实时性。在S3C2410平台上,为了实现用户层的实时,Xenomai实现了一个硬件计数器——Decrementer。这个硬件计数器可以在用户空问里很好地模拟TSC(Time Stamp Counter,时间戳计数器)。
同时,Xenomai在Linux内核中加入了一个全新的数据结构__ipipe_tscinfo,可以通过此数据结构变量存放用户层需要的数据。该数据结构组成如下:
在用户层,应用程序通过系统调用可以迅速得到struct_ipipe_tscinfo结构体中的数据。而且为了避免受到缓存的影响,Xenomai将此结构体变量存放在Linux的向量页中。
内核通过函数_ipipe_mach_get_tscinfo来填充struct_ipipe_tscinfo结构体变量中的各项内容:
Xenomai多API构架
除了提供Linux硬实时,Xenomai的另一个目的是使基于Linux的实时操作系统能提供与传统的工业级实时操作系统(包括VxWorks、 pSOS+、VRTX或者uITRON)功能相同的API。这样,可以让这些操作系统下的应用程序能够很容易地移植到GNU/Linux环境中,同时保持很好的实时性。
Xenomai的核心技术表现为使用一个实时微内核(real—time nucleus)来构建这些实时API,也称作“skin”。在实时核复用的基础上,一个skin可以很好地模拟一种实时操作系统的API。它的结构图可以参考图2。
图2中,Native是Xenomai自带的API,各类API都有着同等的地位,都独立地基于同一个实时微内核。这样做可以让内核的优点被外层所有的 API很好地继承下来。更重要的是,实时微内核提供的服务被外层各种API以不同的方式表现出来,由此可以增强整个系统的强壮性。
编制实时程序时,在很多实时操作系统上只能在内核层实现;而编制实时内核模块时,会受到内核的限制,比如有些实时内核不支持浮点运算,模块出错时容易使整个系统挂起,而且内核模块的调试比较困难。Xenomai能够支持较好的用户层实时,这为编制实时性要求不是非常高的实时程序提供了一个有效途径。下面这个用户层实时例程使用的是Xenomai提供的Native API:
13,adeos http://home.gna.org/adeos/
RTAI和xenomai都使用了adeos架构。
The purpose of Adeos is to provide a flexible environment for sharing hardware resources among multiple operating systems, or among multiple instances of a single OS.
To this end, Adeos enables multiple prioritized domains to exist simultaneously on the same hardware. For instance, we have successfully inserted the Adeos nanokernel beneath the Linux kernel, opening a full range of new possibilities, notably in the fields of SMP clustering, patchless kernel debugging and real-time systems for GNU/Linux.
The complete Adeos approach has been thoroughly documented in a whitepaper entitled « Adaptive Domain Environment for Operating Systems ».
|
|