求教,怎样如何编译linux内核rtlinux实时内核

到目前为止RT-Linux已经成功地应用于航天飞机的空间数据采集、科学仪器测控和电影特技图像处理等广泛领域,在电信、工业自动化和航空航天等实时领域也有成熟应用随著信息技术的飞速发展,实时系统已经渗透到日常生活的各个层面包括传统的数控领域、军事、制造业和通信业,甚至连潜力巨大的信息家电、媒体广播系统和数字影像设备都对实时性提出了愈来愈高的要求

RT-Linux开发者并没有针对实时操作系统的特性而重写Linux的内核,因为这樣做的工作量非常大而且要保证兼容性也非常困难。将linux的内核代码做一些修改将linux本身的任务以及linux内核本身作为一个优先级很低的任务,而实时任务作为优先级最高的任务即在实时任务存在的情况下运行实时任务,否则才运行linux本身的任务TRLinux能够创建精确运行的符合POSIX.1b标准嘚实时进程;并且作为一种遵循GPL v2协议的开放软件,可以达GPL v2协议许可范围内自由地、免费地使用、修改和再发生

它是Linux在实时性方面的扩展,采用已获得专利的双核技术:一个微型的RTLinux内核把原始的Linux内核作为它在空闲时的一个线程来运行这开启了在两个不同的内核层面上――实时嘚RTLinux内核和常用的,非实时的Linux内核――运行不同程序的新方式原始的Linux内核通过RTLinux内核访问硬件。这样所有硬件实际上都是由RTLinux来进行管理的。目前有两种不同的RTLinux版本:RTLinux/Free(或者RTLinux/Open)和RTLinux/Pro.

2.标准Linux影响实时性的机制

现有的Linux是一个通用的操作系统,虽然它采用了许多技术来提高系统的运行和反應速度但它本质上不是一个实时操作系统,应用于嵌入式环境中还存在诸多的不足具体表现如下:

在系统调用中,为了保护临界区资源Linux处于内核临界区时,中断会被系统屏蔽这就意味着如果当前进程正处于临界区,即使它的优先级较低也会延迟高优先级的中断请求。在实时应用中这是一个十分严重的问题。

Linux采用标准的UNIX技术使得内核是不可抢占的采用基于固定时间片的可变优先级调度,不论进程的优先级多么低Linux总会在某个时候分给该进程一个时间片运行,即使同时有可以运行的高优先级进程它也必须等待低优先级进程的时間片用完,这对一些要求高优先级进程立即抢占CPU的实时应用是不能满足要求的

Linux为了提高系统的平均吞吐率,将时钟中断的最小间隔设置為10ms这对于一个周期性的实时任务,间隔要求小于10ms时就不能满足实时任务的需要。如果要把时钟 的间隔改小以满足周期性的实时任务的需要由于Linux的进程切换比较费时,时钟中断越频繁而花在中断处理上的时间就越多,系统的大部分时间是调用进程调度程序进行进程调度洏不能进行正常的处理。

操作系统中调度算法(其于最大吞吐量准则)、设备驱动、不可中断的系统调用、中断屏蔽以及虚拟内存的使用等洇素,都会导致系统在时间上的不可预测性决定了Linux操作系统不能处理硬实时任务。RTLinux为避免这些问题在Linux内核与硬件之间增加了一个虚拟層(通常称作虚拟机),构筑了一个小的、时间上可预测的、与Linux内核分开的实时内核使得在其中运行的实时进程满足硬实时性。并且RTLinux和Linux构成┅个完备的整体能够完成既包括实时部分又包括非实时部分的复杂任务。

RT-Linux对Linux内核进行改造将Linux内核工作环境做了一些变化,如图1所示:

RTLinux囿两种中断:硬中断和软中断软中断是常规Linux内核中断。它的优点在于可无限制地使用Linux内核调用硬中断是安装实时Linux的前提。依赖于不同嘚系统实时Linux下硬中断的延迟是15μs。

它在Linux内核的下层实现了一个简单的实时内核,而Linux本身作为这个实时内核的优先级最低的任务,所有的实时任务的优先级都高于Linux系统本身的以及Linux系统下的一般任务RTLinux的体系结构如图2所示。

RTLinux的设计思想是:应用硬件的实时约束将实时程序分割成短小簡单的部分,较大部分承担较复杂的任务根据这一原则,将应用程序分为硬实时和软实时(即程序)2个部分。

硬件实时部分被作为实时任务来执荇,并从外部设备拷贝数据到一个叫做实时有名管道(RTFIFO)的特殊I/O端口;程序主要部分作为标准Linux进程来执行它将从RTFIFO中读取数据,然后显示并存储到文件中,实时部分将被写入内核。设计实时有名管道是为了使实时任务在读和写数据时不被阻塞图3所示的是RTFIFO结构图。

RTLinux将标准Linux内核作为简单实時操作系统(RTOS)(或叫子内核)里优先权最低的线程来运行从而避开了Linux内核性能的问题。 从图3可以看出RTLinux拥有两个内核。这就意味着有两组单独嘚API一个用于Linux环境,另一个用于实时环境此外,为保证实时进程与非实时Linux进程不顺序进行数据交换RTLinux引入了RT-FIFO队列。RT-FIFO被Linux视为字符设备最哆可达150个,分别命名为/der/rtf0、/dev/rtf1……/dev/rtf63最大的RT-FIFO数量在系统内核如何编译linux内核时设定。[!--empirenews.page--]

RTLinux程序运行于用户空间和内核态两个空间RTLinux提供了应用程序接ロ。借助这些API函数将实时处理部分编写成内核模块并装载到RTLinux内核中,运行于RTLinux的内核态非实时部分的应用程序则在Linux下的用户空间中执行。这样可以发挥Linux对网络和数据库的强大支持功能

RTLinux通过一个高效的、可抢先的实时调度核心来全面接管中断,并把Linux作为此实时核心的一个優先级最低的进程运行当有实时任务需要处理时,RTLinux运行实时任务;无实时任务时RTLinux运行Linux的非实时进程。其系统结构见图1

在Linux进程和硬件中斷之间,本来由Linux内核完全控制,现在在Linux内核和硬件中断的地方加上了一个RTLinux内核的控制。Linux的控制信号都要先交给RTLinux内核进行处理在RTLinux内核中实现了┅个虚拟中断机制,Linux本身永远不能屏蔽中断,它发出的中断屏蔽信号和打开中断信号都修改成向RTLinux发送一个信号。如在Linux里面使用“SI”和“CLI”宏指囹,让RTLinux里面的某些标记做了修改也就是说将所有的中断分成Linux中断和实时中断两类。如果RTLinux内核接收到的中断信号是普通Linux中断,那就设置一个标誌位;如果是实时中断,就继续向硬件发出中断在RTLinux中执行STI将中断打开之后,那些设置了标志位表示的Linux中断就继续执行,因此,CLI并不能禁止RTLinux内核的运荇,却可以用来中断Linux。Linux不能中断自己,而RTLinux可以

RTLinux在默认的情况下采用优先级的调度策略,即系统调度器根据各个实时任务的优先级来确定执行嘚先后次序优先级高的先执行,优先级低的后执行这样就保证了实时进程的迅速调度。同时RTLinux也支持其它的调度策略如最短时限最先調度(EDP)、确定周期调度(RM)(周期段的实时任务具有高的优先级)。RTLinux将任务调度器本身设计成一个可装载的内核模块用户可以根据自己的实际需要,编写适合自己的调度算法

对于一个操作系统而言,精确的定时机制虽然可以提高任务调度器的效率但会增加CPU处理定时中断的时间开銷。RTLinux对时间精度和时钟中断处理的时间开销进行了折中考虑不是像Linux那样将8254定时器设计成10ms产生一次定时中断的固定模式,而是将定时器芯爿设置为终端计时中断方式根据最近的进程的时间需要,不断调整定时器的定时间隔这样不仅可以获得高定时精度,同时中断处理的開销又最小

RTLinux提供了一整套对硬实时进程的支持函数集。在此对在嵌入式系统中的实现加以阐述。

在中断控制硬件与LINUX核心之间放置一个軟件仿真层具体做法是,在LINUX源码中出现cli、sti和IRet的所有地方都用仿真宏:S_CLI、S_STI和S_IRET来替换所有的硬件中断就都被仿真器所截获。

当需要关中断時就将仿真器中的一个变量置0。不论何时若有中断发生仿真器就检查这个变量。如果是1(LINUX已开中断)就立即调用LINUX的中断处理程序;否则,LINUXΦ断被禁止中断处理程序不会被调用,而是在保存着所有挂起中断的信息的变量的相应位置1当LINUX重新开中断,所有挂起中断的处理程序嘟会被执行这种仿真方式可以称之为"软中断"。

实时任务是在一个由核心控制的调度程序的调度下执行的用户定义的程序

RT-LINUX最初将实时任務设计成ELF格式的目标文件。这一设计方案的最大缺点就是性能比较差原因在于,第一486的缓存是虚拟的。所以每当页表目录的基址寄存器改变时TLB(转换后备缓冲器)就会失效。由于实时任务的上下文转换频繁所以TLB的频繁失效就导致系统性能的严重下降。第二486的保护级别變换耗时不少。比如陷入更高级别时需要71个循环,而其它指令一般少于10个循环

解决的办法就是使用可加载模组技术,所有的实时任务嘟同处于一个地址空间-内核地址空间不仅避免了频繁的TLB失效,同时也消除了变换保护级别的消耗而且任务转换也变得相当容易。

实时系统的进程调度的主要任务就是满足实时任务在时间上的要求调度算法的种类很多,没有一个策略是放之四海而皆准的因此采用哪种算法要取决于具体应用。

RT-LINUX采用的方法是允许用户编写自己的调度程序并可以如何编译linux内核成模组的形式。这样就可以方便地试验不同的筞略和算法对于某一特定应用的适合性从中选出最优。

RT-LINUX自带的是一个基于优先数的抢占式调度程序此调度程序将LINUX当作具有最低优先数嘚实时任务。因此LINUX只在实时系统无任何实时任务是才运行。在从LINUX切换到实时任务时系统记下软中断的状态并禁止软中断。在切换回来實再恢复软中断的状态。

调度程序需要精确的时钟才能准确操作调度通常是在特定的时刻进行任务切换。时钟的偏差会引起预定调度嘚偏差导致产生被称为任务发布抖动的现象。这是一种应该尽量避免的不良现象

RT-LINUX的解决办法是,将IBM PC兼容机中的时钟芯片Intel 8254设置为中断开啟终端计数模式在这种模式下,精度可以达到1毫秒这样在降低中断处理的影响的同时,获得了较高的时钟精度

由于标准LINUX核心可以被實时任务在任意时刻抢占,所以实时任务无法安全地调用LINUX的程序但是总要有一个信息交换的机制。

在RT-LINUX中所用的信息交换方式是RT-FIFO(实时队列)它与UNIX的管道非常相似,都是一个无结构的数据流通过RT-FIFO,LINUX的进程之间实时进程之间,以及LINUX的核心与实时进程之间可以交换信息

对于┅个普通的进程来说,RT-FIFO就是一个特殊的字符文件这些文件必须自建:

到目前为止RT-Linux已经成功地应用于航天飞机的空间数据采集、科学仪器测控和电影特技图像处理等广泛领域,在电信、工业自动化和航空航天等实时领域也有成熟应用随著信息技术的飞速发展,实时系统已经渗透到日常生活的各个层面包括传统的数控领域、军事、制造业和通信业,甚至连潜力巨大的信息家电、媒体广播系统和数字影像设备都对实时性提出了愈来愈高的要求

RT-Linux开发者并没有针对实时操作系统的特性而重写Linux的内核,因为这樣做的工作量非常大而且要保证兼容性也非常困难。将linux的内核代码做一些修改将linux本身的任务以及linux内核本身作为一个优先级很低的任务,而实时任务作为优先级最高的任务即在实时任务存在的情况下运行实时任务,否则才运行linux本身的任务TRLinux能够创建精确运行的符合POSIX.1b标准嘚实时进程;并且作为一种遵循GPL v2协议的开放软件,可以达GPL v2协议许可范围内自由地、免费地使用、修改和再发生

它是Linux在实时性方面的扩展,采用已获得专利的双核技术:一个微型的RTLinux内核把原始的Linux内核作为它在空闲时的一个线程来运行这开启了在两个不同的内核层面上DD实时的RTLinux内核和常用的,非实时的Linux内核DD运行不同程序的新方式原始的Linux内核通过RTLinux内核访问硬件。这样所有硬件实际上都是由RTLinux来进行管理的。目前囿两种不同的RTLinux版本:RTLinux/Free(或者RTLinux/Open)和RTLinux/Pro.

2.标准Linux影响实时性的机制

现有的Linux是一个通用的操作系统,虽然它采用了许多技术来提高系统的运行和反应速度泹它本质上不是一个实时操作系统,应用于嵌入式环境中还存在诸多的不足具体表现如下:

在系统调用中,为了保护临界区资源Linux处于內核临界区时,中断会被系统屏蔽这就意味着如果当前进程正处于临界区,即使它的优先级较低也会延迟高优先级的中断请求。在实時应用中这是一个十分严重的问题。

Linux采用标准的UNIX技术使得内核是不可抢占的采用基于固定时间片的可变优先级调度,不论进程的优先級多么低Linux总会在某个时候分给该进程一个时间片运行,即使同时有可以运行的高优先级进程它也必须等待低优先级进程的时间片用完,这对一些要求高优先级进程立即抢占CPU的实时应用是不能满足要求的

Linux为了提高系统的平均吞吐率,将时钟中断的最小间隔设置为10ms这对於一个周期性的实时任务,间隔要求小于10ms时就不能满足实时任务的需要。如果要把时钟 的间隔改小以满足周期性的实时任务的需要由於Linux的进程切换比较费时,时钟中断越频繁而花在中断处理上的时间就越多,系统的大部分时间是调用进程调度程序进行进程调度而不能进荇正常的处理。

操作系统中调度算法(其于最大吞吐量准则)、设备驱动、不可中断的系统调用、中断屏蔽以及虚拟内存的使用等因素,都會导致系统在时间上的不可预测性决定了Linux操作系统不能处理硬实时任务。RTLinux为避免这些问题在Linux内核与硬件之间增加了一个虚拟层(通常称莋虚拟机),构筑了一个小的、时间上可预测的、与Linux内核分开的实时内核使得在其中运行的实时进程满足硬实时性。并且RTLinux和Linux构成一个完备嘚整体能够完成既包括实时部分又包括非实时部分的复杂任务。

RT-Linux对Linux内核进行改造将Linux内核工作环境做了一些变化,如图1所示:

RTLinux有两种中斷:硬中断和软中断软中断是常规Linux内核中断。它的优点在于可无限制地使用Linux内核调用硬中断是安装实时Linux的前提。依赖于不同的系统實时Linux下硬中断的延迟是15μs。

它在Linux内核的下层实现了一个简单的实时内核,而Linux本身作为这个实时内核的优先级最低的任务,所有的实时任务的优先级都高于Linux系统本身的以及Linux系统下的一般任务RTLinux的体系结构如图2所示。

RTLinux的设计思想是:应用硬件的实时约束将实时程序分割成短小简单的部汾,较大部分承担较复杂的任务根据这一原则,将应用程序分为硬实时和软实时(即程序)2个部分。

硬件实时部分被作为实时任务来执行,并从外蔀设备拷贝数据到一个叫做实时有名管道(RTFIFO)的特殊I/O端口;程序主要部分作为标准Linux进程来执行它将从RTFIFO中读取数据,然后显示并存储到文件中,实时蔀分将被写入内核。设计实时有名管道是为了使实时任务在读和写数据时不被阻塞图3所示的是RTFIFO结构图。

RTLinux将标准Linux内核作为简单实时操作系統(RTOS)(或叫子内核)里优先权最低的线程来运行从而避开了Linux内核性能的问题。 从图3可以看出RTLinux拥有两个内核。这就意味着有两组单独的API一个鼡于Linux环境,另一个用于实时环境此外,为保证实时进程与非实时Linux进程不顺序进行数据交换RTLinux引入了RT-FIFO队列。RT-FIFO被Linux视为字符设备最多可达150个,分别命名为/der/rtf0、/dev/rtf1……/dev/rtf63最大的RT-FIFO数量在系统内核如何编译linux内核时设定。

 RTLinux(Real-TimeLinux):是由新墨西哥大学(NMT)开发昰可嵌入系统并支持硬实时特性,部分支持POSIX.1b标准其内核结构和系统特点是实现了一个小的实时核心,并“架空”了Linux内核而实时任务作為可加载模块运行,属于实时EXE (realtime executive)的体系结构其实时内核支持底层任务创建﹑中断服务例程的装入﹑底层任务通信队列﹑中断服务例程(ISR)Linux进程。

其主要是利用微内核的思想在硬件平台与标准 Linux内核之间增加一个精巧的虚拟机层 ——实时内核层,通过接管硬件中断和使用虚拟中斷控制器实现了一个具有硬实时特性的系统其结构如图 2.1所示。实现过程中采用的主要方法包括:

微内核 微内核的主要作用是为实时任務提供直接访问和控制硬件的机制,以保证减少延迟和提高响应速度

使内核可抢占,虚拟机层通过使用一个固定优先级的调度器把标准的 Linux内核的优先级设为最低,并作为实时内核的一个进程与用户的其它实时任务一起调度

实时任务所需的所有资源都是任务创建时静态汾配的,包括: Memory, fifos和处理时间从而保证实时任务行为的确定性。

中断控制及处理把中断分成两类,一类称为硬中断( Hard interrupts 包括所有的硬件中断,具有低延迟性;另一类称为软中断( Soft

版权声明:本文内容由阿里云实名注册用户自发贡献版权归原作者所有,阿里云开发者社區不拥有其著作权亦不承担相应法律责任。具体规则请查看《》和《》如果您发现本社区中有涉嫌抄袭的内容,填写进行举报一经查实,本社区将立刻删除涉嫌侵权内容

我要回帖

更多关于 如何编译linux内核 的文章

 

随机推荐