基于RTAI的实时LINUX分析与实现

时间:2022-09-01 03:15:25

基于RTAI的实时LINUX分析与实现

摘 要:LINUX作为一种开放的操作系统已经得到广泛的应用,但是LINUX是面向桌面的操作系统,本身实时性并不是很出色,在很多应用场合需要对它的实时性能进行改进。本文详细分析了一种基于实时应用接口的LINUX扩展方案,通过RTAI动态加载实时内核,改善了LINUX系统的实时性。

关键词:操作系统;应用接口;内核;实时

中图分类号:TP316.81

1 引言

实时系统是一种特殊的系统,它主要特点是在规定时间内一定能够响应任务的需求。这种特性就特别适合一些对时间要求严格的场合,比如控制列车运行的操作系统。因此实时系统目前主要应用于过程控制自动化系统、办公自动化、航空航天系统、武器制导系统等领域,并且发挥着举足轻重的作用。

Linux的出现给我们带来了新的契机,由于Linux系统本身的开源性,用户可以根据自己的需求定制和修改以达到不同的效果。但是,大部分实时系统,需要很短的响应时间,需要操作系统的硬实时特性,而标准的Linux操作系统是达不到硬实时的要求。本论文分析了Linux 2.6内核实时性的不足以及RTAI底层实现机制,并构建一个基于Linux和RTAI的实时系统。

2 Linux内核实时性分析

对一个操作系统而言,调度程序的效率将直接影响到系统的整体性能。在Linux中,调度策略分为三种:

(1)SCHED_NORMAL:面向普通进程的时间片轮转策略。

(2)SCHED_FIFO:面向对实时性要求要求比较高,运行时间比较短的进程。用这种思想进行调度时,各进程按先入先出的顺序获得CPU。

(3)SCHED_RR:面向于实时性要求比较高,运行时间比较长的进程。用这种思想进行调度时,各进程按时间片的方流使用CPU。

在2.6内核中,对Linux的调度策略进行了很大的改进,有关进程调度最重要的改进是采用O(1)算法和内核态的可抢占性。因此,我们利用Linux开源性的优势,对Linux内核进行扩展,采用RTAI对Linux进行实时性改进以满足实时任务的需求。

3 RTAI实时性分析

RTAI是一种对Linux系统的硬实时扩展,它可以提供工业级的实时操作系统功能,达到了硬实时性的要求,RTAI的功能都可以在Linux下访问。

RTAI采用了一种叫做ADEOS的思想进行实现。ADEOS在操作系统的底部插入一个微内核,各个操作系统运行在微内核之上,各个操作系统都可以操作控制硬件。Adeos把它管辖的各个操作系统称为域,RTAI系统本身作为Adeos中的一个域存在,在Adeos管理下实现RTAI系统的初始化、中断的申请、中断服务程序的注册等。在Adeos的调度策略里面,RTAI的优先级是最高的,一旦RTAI有任务需要处理,Adeos立即进行调度,使RTAI能够响应相应的实时任务,只有当RTAI处于空闲状态时,Adeos才会调度Linux运行,这样的调度思想就保证了RTAI的实时任务响应时间,从而提供了实时系统的可确定性,使系统达到硬实时的要求。RTAI的原理图如图1:

从图中我们可以看到,RTAI响应的都是实时任务,因此我们设置RTAI域的优先级高于Linux域,这样的策略保证所有的实时任务都优先于Linux域的普通任务,从而不会被linux影响。

这样,Adeos系统上的两个操作系统在这种调度策略下就共同运行,它们可以共享两个操作系统所有的公共资源,RTAI和Linux通过管道、共享内存等模块交换信息,调用彼此的系统服务,也可以根据优先级共享同一个中断信号。

4 实时系统的实现

下面是我构建实时Linux系统的过程:

软件环境: ubuntu,gcc、g++、make等。

我们下载RTAI并解压:

# wget --no-check-certificate https:///RTAI/rtai-3.6.tar.bz2

# tar xvf rtai-3.6.tar.bz2

我们下载一个RTAI支持的内核并解压出来:

例如linux-2.6.20.tar.gz

# tar xvf linux-2.6.20.tar.gz

进入内核目录并应用补丁:

#cd ../linux-2.6.20

# patch -p1 -b < ../rtai-3.6/base/arch/i386/patches/hal-linux-2.6.20-i386-1.10-12.patch

接着把配置文件拷贝到新内核的目录中并配置新内核:

# cd ../linux-2.6.20

#cp /boot/config-2.6.20-generic .config

# make menuconfig

配置完成之后我们需要对内核进行编译并安装,在ubuntu环境下最简单的安装内核方式是采用deb方式,因此我们还需要下载一些软件工具包:

# apt-get install kernel-package fakeroot

我们开始编译过程并把内核打包:

# make-kpkg clean

# fakeroot make-kpkg --initrd --app\end-to-version=-rtai \kernel_image kernel\_headers

# cd /usr/src

# dpkg -i *.deb

然后我们重启计算机并配置RTAI

$ sudo -s

# cd /usr/src/rtai-3.5

# mkdir build

# cd build

# make -f ../makefile CC=/usr/bin/gcc- CXX=/usr/bin/g++-

# make install

最后我们在启动grub的时候就可以选择安装了RTAI的ubuntu启动。

5 结束语

Linux作为一个开源性的操作系统已经应用到各个领域,针对不同的应用场合各行各业都会对linux进行改进。本文针对工业控制现场对操作系统的实时性需求,采用RTAI的方法对Linux进行实时性的改进,分析了RTAI实现机制并构建一个基于RTAI和Linux的系统。

参考文献:

[1]Joao Monteiro.RTAI Installation Complete Guide,

[2]范海涛,王树民.基于RTAI的uClinux硬实时性能的实现[J].电力自动化设备,2006,3(3):66-68.

[3]吴国伟,任广臣.Linux内核分析及高级编程[M].电子工业出版社.

[4]吴恒奎.Liunx指令速查手册[M].人民邮电出版社.

作者单位:西安铁路职业技术学院,西安 710014

上一篇:组零为整 小户型大肚量 下一篇:谈谈物理学对医学的促进