uClinux操作系统的实时化分析与研究

发布者:东土大唐88最新更新时间:2012-05-21 来源: 微计算机信息 关键字:µClinux  实时性  RTAI  实时内核 手机看文章 扫描二维码
随时随地手机看文章

1.引言

嵌入式Linux作为一个开放源代码的操作系统,以价格低廉、功能强大又易于移植的特性正在被广泛应用,µClinux是专门针对没有 MMU(Memory Manage Unit)的处理器而设计的嵌入式Linux,非常适合中低端嵌入式系统的需求。µClinux虽然符合POSIX1003.1B关于实时扩展部分的标准,但其最初的设计目标为通用分时操作系统,如果把µClinux用在工业控制、进程控制等微控制领域内,必须要增强µClinux的实时性能。

目前,对嵌入式Linux的实时化改造方案主要有3种:一种是直接修改内核插入抢占点[3],另外一种是资源内核方法[4],最后一种是双内核架构的解决方案。但3种方法中前两种都只能用于软实时应用,只有双内核[2]架构的方案可以保障硬实时应用需求。目前,Linux平台下开发的具有硬实时功能的系统主要有:RTLinux和RTAI[1](Real Time Application Interface)。基于RTAI增强Linux的实时性方面研究得比较多,但是,基于RTAI增强µClinux实时性方面还未见到成型的产品。因此,本文借鉴RTAI对Linux的实时改进机理,对µClinux的实时性改造进行了分析与研究。

2. µClinux的内存管理

标准Linux使用虚拟存储器技术,应用在带有MMU的处理器上,虚拟地址被送到MMU,把虚拟地址映射为物理地址。而µClinux同标准Linux的最大区别就在于内存管理,只有了解它们内存管理的差异后,才能更好地利用RTAI对µClinux进行实时化改造。

µClinux虽然为嵌入式系统做了许多小型化的工作[5],但µClinux与标准Linux的架构完全一致。µClinux虽然无法使用处理器的虚拟内存管理技术,但µClinux仍然采用存储器的分页管理,系统在启动时把实际存储器进行分页,在加载应用程序时分页加载。一个进程在执行前,系统必须为进程分配足够的连续地址空间,然后全部载入主存储器的连续空间中。µClinux采用实存储器管理策略,通过地址总线对物理内存进行直接访问。所有程序中访问的地址都是实际的物理地址,操作系统对内存空间没有保护,所有的进程都在一个运行空间中运行(包括内核进程)。

在µClinux系统中,缺少了MMU的内存映射,µClinux必须在可执行文件加载阶段对可执行文件reloc处理,使得程序执行时能够直接使用物理内存;其次,µClinux没有自动生长的堆栈,也没有brk()函数,用户空间的程序必须使用mmap()命令来分配内存;同时,在实现多个进程时需要实现数据保护,µClinux虽然支持fork()函数,但实质是所有的多进程管理都通过vfork()函数来实现。vfork() 是µClinux与标准Linux应用程序的开发中最重要的不同之处,只有对vfork()与fork()两个函数的差异和程序处理机制有详细的了解后,才能顺利地完成从Linux到µClinux的程序移植。

3. 基于RTAI的Linux硬实时支持方案

3.1 RTAI简介

RTAI for Linux[6]是双内核架构的Linux实时化方案的典型代表,它由意大利的Milan大学主持,是近年来非常活跃的开源项目。系统的实现基础是在Linux上定义了一组实时硬件抽象层RTHAL(Real Time Hardware Abstraction Layer),通过RTHAL进行硬件管理,把基本内核和实时内核结合在一起,其中一个内核的改变,不会影响另一个内核的执行,RTHAL将RTAI需要在Linux中修改的部分定义成一组程序界面,RTAI只使用这组界面和Linux沟通,其系统结构如图1所示。

3.2 RTAI的RTHAL

RTAI从内核中提取一个RTHAL,RTAI首先是一个中断分发器,当RTAI模块被加载后,CPU中断仍由Linux管理,RTAI只接管外部设备的中断并分发(有可能仍分发给Linux)。这种接管是通过RTHAL来实现的,RTHAL包含一些重要的函数和数据结构,RTAI模块可能修改的内容都收集在此结构体中。

图1双内核实时µClinux架构

当RTAI装载时,只需要重新设置RTHAL中的各项内容。内核需要修改执行RTHAL以代替原来的内容,如

do_IRQ(irq,&dummy);

被修改为:

rthal.c_do_IRQ(irq,&dummy);

Linux初始化RTHAL为指向原始的函数和数据结构,RTHAL仅仅进行重定向。当RTAI被激活,RTHAL保存并且改变这些函数的值为 RTAI自己的内容。以上段代码为例,当RTAI还没有加载时,rthal.c_do_IRQ的值就是Linux的do_IRQ,当RTAI被加载时,RTAI执行以下代码,将rthal.c_do_IRQ替换成RTAI自己的分发器:

rthal.c_do_IRQ=dispatch_irq;[page]

3.3 RTAI的中断处理机制

RTAI的最核心部分就是其中断处理机制。RTAI构建了一个小实时内核接管硬件及中断,支持EDF,RM两种经典实时调度算法,Linux作为此实时内核的最低优先级任务被执行。因而实时任务执行时,Linux及其应用程序将被抢占。RTAI引入了软中断模拟技术,在发生硬件中断时,实时内核只是把它放到中断记录表中,在没有实时应用运行时才向Linux派发这些被保留的中断。同时实时内核还监控Linux的开/关中断原语,以避免这些操作把实际的中断关闭而影响实时内核的响应时间。主要包括以下几个方面:

①函数替换

首先是Linux的开/关中断等函数被RTAI提供的函数所替代,这样Linux不能真正的关闭中断,而只是一个软件的机制。当外设中断到来时,RTAI的替换函数必须检查硬件中断标志是否关闭和调用是否来自RTAI上下文。在此两种情况之下,不能直接调用Linux的中断处理函数,中断分发器只用于当CPU处于Linux上下文并且Linux开中断时,才调用Linux的中断处理例程(ISR)。

②全局变量

RTAI为每个中断源定义了一个全局的数据结构:

struct linux_irq{struct list_head list;

int irq;

int masked;

int pending;}

其中list_head用于从Linux的中断挂起队列中插入或删除。irq被初始化为此结构体所对应的中断号。masked是一个标志位,可能具有以下3种值:1表示在中断延迟函数中设置;2表示由Linux中断mask函数设置;3表示由Linux中断unmask函数设置。

③中断传递

中断传递可能被RTAI中断分发器或Linux的开中断函数所调用。当Linux打开中断时,检查挂起中断链表是否为空,若不为空,则循环进行处理,直到所有中断都被处理为止。其算法如下:

while(irqlist 不空){

从irqlist队列中取出一个中断;

if(该中断正在被屏蔽)  continue;

else{关闭Linux中断;执行中断处理例程;开中断;}}

3.4 RTAI的任务调度

①细粒度定时器的实现

标准Linux的定时器提供10ms的调度粒度,不足以达到实时响应速度的要求。RTAI通过提高系统时钟精度改写了时钟处理程序,使之支持更高分辨率时钟的周期模式,引入了两种定时器模式:periodic(周期性)和one shot(一次性)。对于周期性实时任务应用periodic模式,只需要在初始化时对定时器进行设置,保证了处理效率;对于非周期实时任务应用one shot模式。在任何时刻,时钟的下一次中断间隔由所有定时器中到期最早的一个来决定。一旦定时器到期,内核便能够立刻响应,内核的响应开销只由中断服务的时间所决定,使得实时应用的响应时间可以达到纳秒级的水平,完全可以满足一般工业应用实时控制的要求。

②调度机制

在实时任务之间、实时任务与Linux应用之间提供丰富的通讯机制(如FIFO管道、MBUFF共享内存等)进行通信;Linux应用可以通过这些通讯机制与实时应用交互,同时也可以通过实时内核中的实时应用代理(LXRT)运行实时任务。

任何实时任务的优先级都要高于Linux,只有当没有实时任务运行时,Linux才被调度,从而保证了RTAI的实时性。任务的调度周期在任务初始化时由程序员指定,也可在某个时刻调用API修改。rt_task_struct包含多个双向指针,所有的任务(包括Linux)都包括在各个链表中。如 ready任务链表,其中Linux为链表头,当发生调度时,RTAI在ready链表中搜寻优先级最大的任务并切换执行,当没有实时任务在ready态时,则切换至Linux系统。

4. RTAI在µClinux上的移植

4.1 RTHAL的移植

图2基于RTAI的µClinux应用程序结构

借鉴RTHAL的思想,对µClinux核心进行改动,将其与中断控制器隔离,核心中的所有中断操作指令都被替换成相应的宏。对于RTAI的移植而言,最重要的部分就是RTHAL的移植,RTAI绝大部分与处理器相关的代码都在这里,这里以作者所使用的S3C4510B(ARM7的核)和µClinux环境为例进行说明。由于RTAI已经有ARM处理器上的版本,因此可以参照ARM7处理器的RTHAL来移植到S3C4510B上。由于µClinux为针对没有MMU处理器的操作系统,因此RTAI需要去除与MMU相关的代码。对于S3C4510B和µClinux,其RTHAL主要包括如下数据结构:

{指向IDT的指针;

打开/关闭中断函数(cli,sti&flags);

控制中断mask/unmask函数;

中断状态的数据描述符(status,hander,nestedlevel,…);}[page]

4.2定时器的移植

如前面分析,对于一个实时操作系统,必须有精确的计时。在i386体系结构中,有时间标签计数器TSC(Time Stamp Count),在S3C4510B处理器上没有这个寄存器,可以采用计时器2(Timer1)来模拟TSC的功能。每来一个时钟脉冲,Timer1的 TCNT1寄存器减1,减到零后产生时钟中断,再从TDATA1中读TCNT1的值,往复运行。具体的做法是使用一个内核的全局变量,每次时钟中断来以后,在Timer1的寄存器中读出值,计算其增量,为了使系统更精确,必须将Timer1中断设置为最高优先级,这样就可以模拟64位的TSC寄存器,从而得到当前的准确计时。

5.基于RTAI与µClinux的应用程序的开发

编写应用程序时,将实时系统的应用程序分为实时任务和非实时任务。实时任务是实时模块,作为µClinux核心可加载模块运行在核心态。它的设计应尽可能简单,仅包含那些有强实时要求的处理模块,如实时数据采集、外部设备控制等。非实时任务是普通的µClinux进程,在用户态执行,完成大部分的数据处理、图形显示和通讯等任务。所有的实时任务均按照对实时性要求的高低来进行优先级排队,系统根据优先级的高低来顺序启动各个实时任务。而位于用户态的界面,当作一个背景程序来执行。核心态的任务优先级总是高于用户态的界面任务,且不能被其抢占。实时任务和非实时任务之间可通过FIFO队列和共享内存等方法通信。基于RTAI的µClinux应用程序结构图如图2所示。

实时系统的启动和结束可以用一个Shell程序来执行,它的功能是实现各任务模块的加载和卸载,以及用户界面的运行。Shell程序是介于使用者和操作系统的内核程序间的一个界面,使用户更为方便的使用操作系统。由于各个模块之间具有相互依赖性,所以在加载和卸载各个模块时按照一定的顺序。首先要将 RTAI提供的实时模块加载,包括rtai、rtai_sched、rtai_fifos和rtai_shm等模块;然后装入系统的各个实时模块。卸载模块的时候按照相反的顺序依次卸载。实时系统的程序流程图如图3所示。

6.结束语

作者已将改造后的µClinux系统应用在了江苏省普通高校自然科学研究计划资助项目“机房环境设备安全监控软件平台的研制”等项目中,均取得了良好的效果,解决了µClinux在实时性方面的缺陷,满足了设计要求。

本文作者创新点是:实现了RTAI在µClinux上的移植,形成了RTAI和µClinux相结合的双内核嵌入式系统运行方案,既满足了嵌入式应用的需求,又保证了系统的硬实时性。

参考文献

[1]李俊平,梅洪,单家元.基于Linux的实时平台的研究[J].微计算机信息,2005,21(7):21-23.

[2]林浒,蔡光起等.实时化的Linux系统及其实时性能的研究[J].小型微型计算机系统,2004,25(8):1454-1457.

[3] WANG Y C, LIN K J. Implementing a general real-time frame-work in the RED-Linux real-time kernel [C]. IEEE Real-timeSystem Symposium, 1999.

[4] Raj Rajkumar, Kanaka Juvva, Anastasio Molano, et al. Resource kernel: A resource-centric approach to real-time and multimedia systems[C]. Proceedings of the SPIE/ACM Conference on Mul-timedia Computing and Networking, 1998.

[5]马学文,朱名日等.uClinux操作系统实时性能的研究与实现[J].计算机工程与科学,2005,27(3):103-104.

[6]RTAI主页[EB/OL].htp://www.rtai.org/.

关键字:µClinux  实时性  RTAI  实时内核 引用地址:uClinux操作系统的实时化分析与研究

上一篇:SPARC结构与实时内核的移植
下一篇:uClinux在嵌入式系统中的移植研究

推荐阅读最新更新时间:2024-05-02 22:04

基于RS422A现场总线的温控网络控制系统
  一. 概述   RS-422A总线是EIA公布的“平衡电压数字接口电路的电气特性”标准,这个标准是为改善RS-232C标准的电气特性,又考虑与RS-232C兼容而制定的。RS422A是工业界广泛使用的双向、差动平衡驱动和接收传输线标准接口 ,它以全双工方式通信 ,支持多点连接 ,允许创建多达 32个节点的网络,具有传输距离远 (最大传输距离为 1200m) ,传输速率快 ( 1200m时为 100kbit/s)等优点 ,相对于其它总线,如FF、CAN、LonWorks等而言,具有结构简单、成本低廉、安装方便、与传统的DCS兼容等特点;此外,市场上很多现场仪表都有RS422A总线接口,因此采用该总线可以很容易地开发一些中小型网
[工业控制]
泰克推出面向DDR4、DDR3和DDR3L内存的实时一致分析仪
中国 北京,2013年10月24日 –测试、测量及监测仪器的全球领导厂商—泰克公司日前宣布,推出实时内存执行验证解决方案,以提供针对JEDEC DDR4、DDR3和DDR3L内存标准的更快速协议、性能及一致性分析。由泰克合作伙伴Nexus Technology开发的MCA4000协议一致性和总线协议分析仪提供长时间周期内的内存接口即时可观测性,从而提供对内存总线活动的深入洞悉,这有助于缩短调试周期和加快产品上市速度。 随着行业转向具有更高数据传输速率、更低功耗和更大容量的DDR4和DDR3L等新型内存技术,设计人员在调试和验证具有更小余量、更快边沿速率和复杂总线协议的器件时面临许多新挑战。通过增加实时内存执行验证功能,泰
[嵌入式]
基于ARM-μCLinux嵌入式系统启动引导的实现
   32位ARM嵌入式处理器具有高性能、低轼耗的特性,已被广泛应用于消费电子产品、无线通信和网络通信等领域。ΜCLinux是专门为无MMU处理器设计的嵌入式操作系统,支持ARM、Motorola等微处理器。目前国内外采用ARM-μCLinux作为嵌入式系统非常普遍。而嵌入式系统的启动引导技术是嵌入式系统开发的一个难点。系统启动引导的成功与否决定了应用程序的运行环境是否能正确构建,即系统启动成功是应用正确运行的前提。 常用的嵌入式系统启动方法是先通过JTAG将嵌入式操作系统内核与进Flash,再由其带的引导程序bootloader完成嵌放式系统的启动引导工作。这种方法要借助昂贵的JTAG设备完成操作系统内核 的烧写工
[应用]
基于实时内核的电动车电子差速算法仿真
引言 伴随着日益严重的大气污染和能源危机,传统的交通工具——汽车的发展面临着一系列的挑战。传统的内燃机汽车消耗大量的石油资源,严重污染环境。这些无法避免的缺点使人们意识到,以清洁能源为动力的新一代汽车替代传统汽车的重要性,其中的 电动汽车 技术已经成为当今汽车领域的前沿课题之一。 电动汽车具有零排放,低噪声,轻便,操控性能好等特点。此外随着电动轮技术和现场 总线 技术的发展,在电动车上更容易实现四轮独立驱动控制,进而为刹车防抱死系统(ABS)、 电子 稳定系统(ESP)等主动安全系统的实现提供便利。 本文介绍一种基于 嵌入式 实时内核ARTXl66的电子差速算法。 1 基于Ackermann转向模型的四轮速度关系
[嵌入式]
改善Linux内核实时方法的研究与实现
   0 引言   由于Linux具有功能强大、源代码开放、支持多种硬件平台、模块化的设计方案以及丰富的开发工具支持等特点,在实际系统中,得到了广泛的应用。但由于其最初的设计目标为通用分时操作系统,对于实时系统而言,Linux仍然存在核心不可抢占、关中断、时钟粒度粗糙等缺陷。为了使其应用于嵌入式系统,实时控制等领域,越来越多的厂家和研究机构热衷于改善其实时性,构建基于Linux的实时操作系统。   在Linux 2.4和以前的版本,内核是不可抢占的,也就是说,如果当前任务运行在内核态,即使当前有更紧急的任务需要运行,当前任务也不能被抢占。因此那个紧急任务必须等到当前任务执行完内核态的操作返回用户态后或当前任务因需要等待某
[嵌入式]
实时内核uC/OS-II下的网络监控系统的设计
摘要:介绍了一种嵌入式于单片机的Web服务器的设计过程,给出了单片机控制下的网络控制器RTL8019AS硬件平台的设计、精简的TCP/IP协议栈通过LAN访问Internet的应用方案。同时简明介绍了实时内核uC/OS-II对整个系统的管理方案,完成了对连接在系统I/O总线上的现有设备的监控。 关键词:Web服务器 单片机 uC/OS-II TCP/IP协议栈 动态IP配置 随着信息时代的到来,特别是互联网的迅速普及,人们开始越来越多地接触到一个新概念--嵌入式产品。将嵌入式系统接入Internet。不仅实现了设备的远程控制、维护和升级,而且可实现资源共享。通过网络对设备进行监控,一个外部界面是必不可少的,利用Web浏览器可
[嵌入式]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved