基于Linux的实时平台的研究

发 布 时 间 : 2008-11-18 来 源 : 来自网络 作 者 : 匿名 浏 览 :

[摘要] 主要介绍了一个基于Linux操作系统的实时平台的技术研究和实现方法。所研究的实时平台以X86体系PC为硬件环境,Linux操作系统的标准内核加载RTAI模块为软件环境,可为构建实时系统提供优良平台。该平台通过RTAI在Linux上定义的一个实时硬件抽象层(RTHAL)来实现实时进程的最高优先级调用。
[关键词] Linux;实时平台;RTAI;实时进程

1 引言

实时系统是指一个能够在事先指定或确定的时间内完成系统功能和对外部或内部、同步或异步时间做出响应的系统。实时的概念有软实时和硬实时两种。软实时指统计意义上的实时,一般指整体吞吐量大或整体响应时间快,但不能保证特定的任务在特定的时间内完成。若偶尔超过时限不会对实际应用造成损害,实时多媒体通讯系统就是一种软实时系统。硬实时是指时间要求必须严格保证的实时,否则会产生不可预料的后果,这才是真正意义上的实时。硬实时系统指系统必须能够确保在最坏情况下的服务时间,即对于事件的响应时间的截止期限是无论如何都必须得到满足的。比如航天中的宇宙飞船的控制、现代加工中心的坐标轴的控制等就是现实中这样的系统。
实时系统在体系方面也多有不同,有微内核体系结构和大型集成化内核体系结构等。微内核体系结构可使得核心小巧而可靠,易于ROM固化,并可模块化扩展。而大型内核体系可以提供多种资源管理器,包括各种文件系统和设备管理,支持多个文件系统同时运行,在设备管理和进程以及终端设备间可以提供大吞吐量、低开销接口服务。而还有一些不同于微内核和大型内核的实时体系结构,如基于Linux的RT-Linux,它属于实时EXE(realtime executive)体系结构。RT-Linux是嵌入式的硬实时操作系统,它继承了Linux系统下许多成熟和丰富的资源,也同时可以比较方便地调用Linux下的系统服务。
Linux是一个通用操作系统,能够支持多种硬件平台,对于安装Linux的X86体系的PC而言,通过进行一定的改造,同样可以搭建相应的实时平台。在此实时平台的基础上将非常便于进一步开发基于Linux的各类实时系统。

2 Linux 的通用特性

Linux是一个性能稳定、功能强大、效率高的32位或64位操作系统,能运行于包括X86和RISC处理器在内的各类硬件平台。Linux类似于UNIX,源代码完全公开,任何人只要遵循GPL,就可以对内核加以修改并发布给他人使用。Linux与UNIX系统兼容,在功能特性与UNIX相似,UNIX用户的开发工具和应用软件都被移植到Linux上。近来,很多基于Linux的实时应用被开发出来,它具有成熟和丰富的资源。
Linux是一种免费的操作系统,并获得了许多同样是免费的软件和开发工具的支持。这就使用户在要求不是特别高的情况下不必选用昂贵的专用实时系统,在PC上就能实现完成硬实时任务的实时系统。对于一般实验室条件下的实时性研究和应用来说,X86系列PC意味着不需要增添太多的硬件设备,可以大大降低成本。

3 Linux的实时性分析

通用Linux系统支持实时和非实时两种进程,实时进程相对于普通进程具有绝对的优先级。对应地,实时进程采用SCHED_FIFO或者SCHED_RR调度策略,普通的进程采用SCHED_OTHER调度策略。
在SCHED_OTHER调度策略中,调度器总是选择那个priority+counter值最大的进程来调度执行。在每一个调度周期中,一个进程的priority和counter值的大小影响了当前时刻应该调度哪一个进程来执行,其中priority是一个固定不变的值,在进程创建时就已经确定,它代表了该进程的优先级,也代表这该进程在每一个调度周期中能够得到的时间片的多少;counter是一个动态变化的值,它反映了一个进程在当前的调度周期中还剩下的时间片。
对于实时进程来说,它们使用的是基于实时优先级rt_priority的优先级调度策略,但根据不同的调度策略,同一实时优先级的进程之间的调度方法有所不同。SCHED_FIFO根据静态优先级对不同的进程进行排队,然后在同一优先级的队列中,谁先做好了运行的准备就先调度谁。SCHED_RR的调度策略跟上面的SCHED_FIFO几乎一模一样,但是SCHED_RR的调度策略给每个进程都分配一个时间片,时间片结束了也就意味着正在执行的进程就会立刻停止,这点和SCHED_FIFO是不同的。

4 RT-Linux和RTAI

RT-Linux是新墨西哥科技大学(New Mexico Institute of Technology)的研究成果。它的基本思想是,为了在Linux系统中提供对于硬实时的支持,它实现了操作系统下的一个简单的实时核心,可以视为一个小的实时操作系统(我们也称之为RT-Linux的实时子系统),而将普通Linux系统本身作为一个该操作系统中的一个低优先级、可抢占的任务在核内来运行,随 时会被高优先级实时任务抢占。RT-Linux的关键技术是通过软件来模拟硬件的中断控制器。当Linux系统要封锁CPU的中断时,RT-Linux中的实时子系统会截取到这个请求,把它记录下来,而实际上并不真正封锁硬件中断,这样就避免了由于封中断所造成的系统在一段时间没有响应的情况,从而提高了实时性。Linux系统中的最小定时精度由系统中的实时时钟的频率决定,一般Linux系统将该时钟设置为每秒100个时钟中断,所以Linux系统中一般的定时精度为 10ms,即时钟周期是10ms,而RT-Linux通过将系统的实时时钟设置为单次触发状态,可以提供十几个微秒级的调度单位。RT-Linux实时子系统中的任务调度可以采用RM、EDF等优先级驱动的算法,也可以采用其他调度算法。
意大利的RTAI( Real-Time Application Interface )源于RT-Linux,它在设计思想上和RT-Linux完全相同。RTAI和RT-Linux一样架空了 Linux,而直接用可加载式核心模块( loadable kernel module) 作为 real-time进程。每一个实时进程实际上就是一个可加载的核心模块。它当初设计目的是为了解决RT-Linux在不同Linux版本之间难于移植的问题,为此,RTAI在 Linux 上定义了一个实时硬件抽象层,实时任务通过这个抽象层提供的接口和Linux系统进行交互,这样在给Linux内核中增加实时支持时,可以尽可能少地修改Linux的内核源代码。

5 基于Linux的实时平台

5.1 硬件配置
在实时平台的研究中,X86体系的PC可选用速度相对较快的CPU,使得在实现硬实时的CPU中断响应时间可以相应缩短,通常PⅢ800以上CPU可以很好实现中断输出。选用的X86体系PC的主板要尽可能兼顾对各种接口芯片组的支持,例如在Intel 845芯片组主板上可以很方便地加装各类转接卡等。对于Linux操作系统而言,对网络通讯的支持功能强大,故在PC上选装Realtek8139D芯片组网卡。另外还需配置硬盘、内存、键盘等相关硬件。
5.2 软件配置
本文建立的实时平台所采用的内核版本是Linux-2.4.20,其主要原因有:
a. 版本为2.2及以前内核中的设备驱动对各种接口的支持不如2.4版本全面;
b. 版本为2.4的内核增加了许多新特性;
c. RTAI对版本2.4的内核增加了相应的支持,性能出色;
d. Linux-2.4.20内核版本加载RTAI组件后具有很好的稳定性;
e. 版本为2.6的内核相对庞大,编译后的内核文件也相对较大。
根据实时平台搭建的需要,首先在PC安装了发行版本为Debian/GNU Linux 2.4.18-bf2.4内核,并将Linux内核版本升级到标准Linux-2.4.20,首先进行内核的设置。内核配置工作可以通过直接修改内核源代码中的 Makefile文件、Config.in文件和内核源代码根目录下的.config文件来实现。内核源代码中的每个目录都有各自的用途,每个子目录也都有相应的Makefile文件。在Linux中采用修改配置文件的方式设置内核比较复杂,而且容易出现错误。比较有效的方式还是直接利用Linux内核提供的工具进行配置。在Linux源代码目录下,Linux内核设置命令是:
#make menuconfig
命令执行后可对内核进行裁减。下面就是几项重要的设置选项:
(1) Loadable module support——对可加载模块支持。可加载模块码不是内核的一部分,但是当需要它的时候,可以被同内核一起加载并使用。如果内核代码编译可加载模块,可以使内核更小,而且更稳定。
(2) General setup——常规选项设置。在这里可以定制特定的内核常规选项。
(3) Parallel port support:并口支持。
(4) Plug and Play configuration :即插即用支持。
(5) Networking options:网络选项。
(6) ATA/IDE/MFM/RLL support:有关各种接口的硬盘/光驱/磁带/软盘支持。
(7) Console drivers:控制台驱动。
设置好内核选项后就可以编译内核了,内核编译只有几个指令,但是内核编译的时间可能会很长。执行内核编译之前可以先执行:
#make proper ;检查内核源代码程序,以发现内核文件是否完备。内核编译命令如下:
#make dep;make bzImage;make modules;make modules_install;make install
编译完成如果系统没有报错,则系统编译成功,可以重启系统以新的内核启动了。
进入内核版本号为Linux-2.4.20的Linux系统后,可运行指令:
#ifconfig;开始配置网络,并安装FTP工具,比如lftp,通过 FTP 工具lftp可获得RTAI-3.OR2代码包,并将代码包解压到RTAI-3.OR2目录。进入该目录,运行指令:
#make menuconfig;进行设置RTAI相关选项,可按默认选项进行下一步编译、安装:
#make bzImage;make install;完成此步系统如果不报错即可重启PC,选择以新生成的Linux-2.4.20-adeos内核镜像引导系统启动,即可进入已成功加载RTAI组件,实现定义实时硬件抽象层(RTHAL)的Linux平台。
5.3 实时平台测试
进入实时Linux平台下RTAI组件安装目录(/usr/realtime),选择其中的/testunit目录。/testunit目录下有RTAI相应的实时响应时间测试程序(/latency),进入该目录运行该程序:
#./run;运行此命令后可看到系统连续以文本格式输出千纳秒级(微秒级)CPU中断响应结果,结果包括CPU中断响应的最快响应时间、最慢响应时间、平均响应时间,分析结果可知该实时平台能够保证严格的实时,即已成功实现硬实时响应。
该程序实现CPU中断响应主要是通过已加载实现的实时硬件抽象层(RTHAL),强制调用APIC (Advanced Programmable Interrupt Controller)高级可编程中断控制器来实现的。在该中断执行中,实时进程始终处于绝对的优先级。
5.4 实时平台分析
此实时平台基于Linux操作系统,对Linux内核的实时化改造,构造了一个从通用性、可配置性、实时性、接口等方面都能适应大规模实时应用的系统内核。此平台在硬件和软方便都具有很强的扩展能力。硬件方面可通过各类转接卡和接口支持数据采集、数据传输等功能。软件方面由于Linux的源代码是公开的,故此实时平台在中断处理、内核调度方式等方面可以按照不同实时系统的特定需求进行定制。
一般实时系统对实时响应、实时数据传输和鲁棒性要求较高,而基于Linux的实时系统在实时性、计算资源利用率以及对外围设备的实时控制的能力方面要更好。
在此实时平台的基础上,保持硬件体系不变,添加实时系统所需硬件接口,设计实时任务调度算法、时钟控制算法、实时驱动程序、人机交互界面等技术方案,就可以实现一套可在实际系统中进行应用的实时系统。
例如在半实物仿真系统中,就选用此实时平台来实现实时仿真系统。硬件方面添加光纤卡、串行卡、A/D转换卡、D/A转换卡等。软件方面可在实时平台内核基础上解决半实物仿真时钟控制算法设计,实时任务调度算法设计,光纤卡驱动程序设计,串行卡、A/D转换卡、D/A转换卡驱动程序设计,人机交互界面设计等。在硬件和软件均调试成功后,实时仿真系统就可在半实物仿真中达到硬实时的要求。

6 结论

本文针对实时应用的需求,提出了在通用PC和通用操作系统上搭建实时平台的基本方法,为构建各类实时系统提供了方法和思路。整个实时平台性能稳定、价格低廉、操作简单,在性能方面具有很大的拓展空间,是进行实时系统设计和研究的优良可选方案。

[参考文献]
[1] 刘志勇,吴健.基于PC/104平台嵌入式Linux系统核心定制方法[J].海洋技术.2004(1).
[2] 须文波,张星烨.基于RTAI-Linux的实时操作系统的分析与研究[J].山东电子.2003(2)



上一篇:Linux在嵌入式系统中的实现 下一篇:uClinux操作系统移植(转贴)