冷火实时Linux平台设计与实现童湘彪(深圳市金宏威技术股份有限公司深圳518055)摘要:提出并设计了一种实时Linux平台。该平台利用CPU中断可分优先级控制的特点,采用“实时中断+内核线程”的应用模式,简化了实时Linux平台的设计,提高了平台的可靠性,降低了应用的开发移植难度,非常适合在电力行业的变配电系统中应用。关键字:实时Linux;实时中断继电保护配电自动化引言因为LINUX免费、源代码开放、内核稳定可靠、支持众多CPU体系架构、具有强大的网络通讯功能,所有其在嵌入式系统中得到广泛应用。但在嵌入式系统中,Linux也有一个较大缺陷----实时性不强,在某些嵌入式应用领域中,关键任务对实时性有较高要求。针对此缺陷,很多嵌入式操作系统厂商对Linux的实时性进行了改进,诞生了许多实时Linux版本,各种版本各有优缺点,这里不展开介绍,以下为冷火实时Linux平台的特点:实时性能好,在CPU主频250Mhz的情况下,实时中断延时5us。平台设计原理和实现方法简单易懂。实现了实时FIFO和实时消息队列,用于实时中断和普通Linux进程之间的通讯。除了实时中断外,并没有实现单独的实时进程,大大简化了实时平台的设计,提高了平台的可靠性。基于以上特点,冷火实时Linux平台适用于高实时性和高可靠性的系统,目前已在电力行业的变配电系统中得到应用,取得良好的效果。冷火实时Linux平台应用场景如下:关键实时任务常规LINUX内核和非实时任务LINUX内核LINUX内核应用进程LINUX非实时中断程序(中断级别1~3)实时中断程序(中断级别4~6)实时通讯层:实时软中断、实时FIFO、实时消息队列非实时输入非实时输出实时输入实时输出图1冷火Linux平台应用场景应用内核线程系统内核线程应用服务进程系统普通中断优先级高优先级低采样中断网络调试通讯线程维护命令通讯线程104规约通讯线程CAN中断测频中断对时中断主循环线程GDBSERVERTELNETSERVERWEBSERVERFTPSERVERDTU主CPU程序kthreaddksoftirqdkblockdeventspdflush。。。应用实时中断保护中断内核串口中断内核定时器中断以太网中断DTU主应用程序实时软中断实时通讯层:FIFO、消息队列图2具体应用实例原理简介利用某些CPU(例如Freescale的MCF5441X)中断可以分优先级控制的特点,将高优先级别中断分配给实时任务,将低优先级别中断分配给Linux内核;然后修改LINUX内核中的中断屏蔽函数,使其只能屏蔽LINUX中的低优先级别中断,不能屏蔽实时任务中的高优先级别中断,这样可以确保实时任务的及时响应。整个冷火实时Linux平台原理实现框图如下:非实时中断优先级低于实时中断,中断延时受Linux中断屏蔽的影响。实时中断优先级最高,可以无条件中断非实时中断,中断延时不受Linux中断屏蔽影响,中断延时5us。常规Linux内核提供文件系统、网络通讯、进程管理、内核同步、内存管理等功能。网络通信进程管理多个常规Linux内核应用进程通过实时FIFO和实时消息队列与实时中断通讯;通过普通Linux通讯方法和常规Linux内核通讯。文件系统实时通讯层:实时FIFO、实时消息队列实时软中断图3冷火实时Linux平台原理实现框图具体实现下面以Freescale的MCF5441X硬件平台为例来说明冷火实时Linux平台的具体实现。实时中断实现1、将低优先级中断级别1~3分配给LINUX中的中断,将高优先级中断级别4~6分配给实时任务。2、修改LINUX中的中断屏蔽函数,使其只能屏蔽3级和3级以下的中断。3、完善实时Linux中断相关函数,包括实时中断登记、注销、允许、屏蔽等。通过以上步骤,可以达到实时中断延时5us的目标值(实测3us)。实时中断和内核进程之间的通讯由于实时中断的响应不受Linux内核中中断屏蔽(local_irq_save)的影响,所以在实时中断中不能调用和Linux内核资源相关的函数(包括通讯同步函数),否则将破坏Linux内核资源的一致性,导致系统崩溃。为了解决实时中断和内核进程之间通讯这个问题,我们设计了实时软中断、实时FIFO、实时消息队列3种通讯机制。其中实时软中断是其它2种通讯机制的基础。实时软中断实时软中断是实时中断通知内核进程的一种基本通讯手段,其基本原理是在非实时中断区域申请一个最低优先级的软中断(实时软中断),当实时中断中有相应事件需要通知时,触发此软中断,此软中断在其它高优先级的中断(包括实时和非实时)执行完成后,就会响应执行,其服务函数可以通过up函数触发一个信号量,唤醒正在等待此信号量的内核进程。注意在此期间,由于软中断服务函数的响应执行,受Linux内核规则的约束,所以不会破坏内核资源的一致性,不会影响Linux的稳定性。其具体过程如图:非实时中断实时中断常规Linux内核网络通信进程管理多个常规Linux内核应用进程文件系统实时通讯层:实时FIFO、实时消息队列实时软中断rt_sirq_isr()up()。。唤醒:down_interruptible()。。rt_sirq_force()图4实时软中断实时FIFO实时FIFO是以实时软中断为通知手段的一种先进先出的队列,主要用于流数据的发送和接收。实时FIFO使用成熟算法,仅对实时中断屏蔽部分进行了优化处理,这里不再叙述。实时消息队列实时消息队列是以实时软中断为通知手段的消息队列。通过实时消息队列,实时中断可以向内核进程发送长度可变的消息,并及时唤醒等待消息的内核进程。实时调试语句输出在冷火实时Linux平台中,为了全面实时了解平台的状态,需要有大量的调试信息输出,这些调试信息的输出必须满足以下几点需求:1.不能影响实时中断的性能。2.为了方便用户获取信息,必须和Linux共用同一个控制台。3.为了方便用户使用,此输出函数应既可在实时中断中调用,也可在其它环境中调用。最终实时调试语句的输出(rt_printf)通过实时FIFO和实时软中断配合实现。具体实现如下:rt_console_write_rt_printf_fifo_get_rt_printf_soft_isrg_printf_fifo_rt_printf_fifo_putrt_printf软中断通知写Linux控制台图5实时调试语句输出实时统计信息为了分析冷火实时Linux平台的各项性能指标(例如实时中断延时、实时中断执行时间、实时中断屏蔽时间等),我们必须收集平台的大量数据信息,为此冷火Linux平台设计了一个实时统计信息模块,统一了每个收集数据的内容和显示格式,示例显示如下:图6实时统计信息实时平台运行为了方便冷火实时Linux平台的维护、移植,我们将冷火实时Linux平台封装在一个库中,让其和内核应用程序一起连接,生成一个标准的动态加载的内核模块,在运行时通过动态加载模式将实时Linux平台和应用一起加载。采用动态加载模式有如下优势:1、在Freescale提供的LinuxBsp中只需要做极少量的修改,这样当BSP升级时,对实时平台影响不大。2、调试、维护方便。采用动态模块方式编译、下载、运行时间都很短,可以较短的时间内完成多次代码修改、调试工作。3、和应用程序一起编译,将极大增强应用程序员对实时Linux平台本身的理解,将大大提高应用系统的稳定性和可靠性。运行示意图如下:应用系统冷火实时Linux平台应用BSPFreescaleMCF5441XLinuxBSP图7冷火实时Linux平台运行示意图结语冷火实时Linux平台是一个实时中断延时低、原理和实现简单可靠的实时Linux系统。目前通过在变配电系统的应用情况来看,其运行稳定可靠,可以满足高实时性、高可靠性系统的需求。参考文献:[1]FreescaleSemiconductor.MCF5441xReferenceManual.2010[2]FreescaleSemiconductor.ColdFireFamilyProgrammer’sReferenceManual.2005