对嵌入式linux进行实时性改进是嵌入式操作系统领域的一个研究热点。本文在分析了现有嵌入式操作系统实时性不足的基础上,提出了一种新型的改进方案(将rtai和uclinux相结合),并给出具体的工控应用实例,进一步对 这种系统的功能进行有效验证。
图1 双内核实时系统嵌入式实时linux架构
嵌 入式linux以代码开放、价格低廉、功能强大又易于移植的特性正在被广泛应用,为嵌入式操作系统提供了一个极具吸引力的选择。但许多实际应用,譬如多媒 体通信、生产过程控制、在线事务处理等等都要求对外部事件在限定的时间内做出反应。因而嵌入式系统实时性问题越来越受到关注,对嵌入式linux进行实时 性改进也成为嵌入式操作系统领域的一个研究热点。
本文提出了一种基于uclinux的嵌入式实时操作系统方案。将rtai和 uclinux相结合,既满足了嵌入式应用的需求,同时又保证了系统的硬实时性。此外,还有强大的网络功能、易升级性、易移植性等优点。最后结合基于这一 操作系统开发的重大装备远程监控系统的应用案例,进一步从功能和性能上对其进行验证。
现有嵌入式操作系统应用中存在的问题
一个优秀的嵌入式操作系统是嵌入式系统成功的关键。它除了具备一般操作系统最基本的功能,如任务调度、同步机制、中断处理、文件功能等,还需要具有以下特点:
1. 更好的硬件适应性,也就是良好的移植性;
2. 占有更少的硬件资源;
3. 高可靠性;
4. 提供强大的网络功能,支持tcp/ip协议及其他协议;
5. 有些应用要求具有实时性能。
现 有的嵌入式操作系统大致可分为商用型和免费型两类:商用型操作系统由于功能稳定、可靠,有完善的技术支持和售后服务,在嵌入式市场占有一定的份额。但它同 时也存在价格昂贵、需要版权、源代码不公开等一系列问题;免费型操作系统(如linux)源码公开,有价格方面的优势,但在严格满足嵌入式实时应用需求方 面还有欠缺。
图2 实时内核实现机理
rtai对linux的实时性改进
现有几种针对linux的实时系统解决方案,实现方法主要包括两种:
1)直接修改linux内核、增加实时性,如:montavista;
2)在普通linux内核之上增加实时模块、双内核结构,如:rtlinux或rtai。
montavista 可以满足用户的软实时要求,rtlinux或rtai着重增强linux的硬实时特性。软实时系统的时限是柔性灵活的,它可以容忍偶然的超时错误。失败造 成的后果并不严重,仅仅是轻微地降低了系统的吞吐量。硬实时系统有一个刚性的、不可改变的时间限制,它不允许任何超出时限的错误。超时错误会带来损害甚至 导致系统失败、或者导致系统不能实现它的预期目标。
rtai采用双内核方法,不直接使用linux的任何功能,而是把需要高度时间精度的 工作写成一个驱动程序的形式,然后直接用pc时序芯片所产生的中断调用这个驱动程序。rtai与nmt rt-linux的最大不同之处在于,它在linux上定义了一组实时硬件抽象层(rthal)。rthal将rtai需要在linux中修改的部分定义 成一组程序界面,rtai只使用这组界面和linux沟通。这样做的好处在于,用户可以将直接修改的linux核心程序代码减至最小,这有可能使得将 rthal移植到新版linux的工作量减至最低。
但是,rtai虽然满足了硬实时性要求,却没有被裁减为足够小且适用于嵌入式系统。
rtai+uclinux的实时方案
uclinux 是为嵌入式应用设计的,它本身并没有更多地关注实时问题。uclinux经过小型化改造,形成了一个高度优化、代码紧凑的嵌入式linux,并保留了 linux大多数的优点。它专门针对无mmu的cpu,去除了普通linux内核中的虚拟内存管理部分。更重要的是,uclinux提供了完整的 tcp/ip协议栈,并支持大量其他的网络协议,为嵌入式系统提供了强大的网络支持。
而从前面的分析可以看出,rtai是基于普通linux内核,相对于嵌入式应用其内核过于庞大;而uclinux本身并没有更多地关注实时问题。因此,可以将rtai和uclinux相结合,采用双内核的设计方案,既满足了嵌入式应用的需求,又保证了系统的硬实时性。
1.硬件抽象层
图3 系统中断处理流程图
系统的实现基础是硬件抽象层,通过硬件抽象层进行硬件管理,把基本内核和实时内核结合在一起,其中一个内核的改变,不会影响另一个内核的执行。
硬 件抽象层定义了本系统同硬件之间的抽象接口,主要用来截取硬件中断,并且依据实时内核调度器的需求,重定向为基本内核任务或是实时任务。rthal包含一 个关键的组件:中断描述符表(idt,interrupt descriptor table),它定义了一套指针用来处理中断例程。rthal本身定义了一个结构,使得基本内核中断处理函数能够很容易地被实时处理函数所替代。这样,当 实时内核通过rthal激活后,新的idt表为合法。在以上控制下,基本内核作为实时系统的任务提供服务。
2.双内核结构
双内核实时系统的总体结构模型如图1所示,主要包含了基本内核、实时内核、硬件抽象层、硬件部分。
其 中基本内核(uclinux)和实时内核(rtai)分别处理非实时和实时任务的调度和执行,而实时任务和非实时任务之间信息的交换要通过管道 (fifo)或共享内存(mbuff)来实现。当实时任务运行时,基本内核被硬件抽象层屏蔽。即实时内核将基本内核作为优先级最低的一个任务来运行,只有 在没有实时任务运行的时候才予以调度。
3.实时内核动态加载
嵌入式实时linux的实时内核是动态加载的。实时任务被激活前,实时内核并没有启动,基本内核通过rthal透明访问硬件,就像rthal不存在一样。当实时任务被激活时,rthal结构发生变化,基本内核被实时内核接管,图2表明了实时内核启动前后,系统发生的变化。
数字电位器的内部电路原理图
ARM架构Parker系列将作为下一代无人驾驶汽车核心
使用MM32F3270 FSMC驱动TFT-LCD
医疗器械行业高值医用耗材市场发展概况
等离子电视的技术指标以及优点详解
一种最新改进嵌入Linux实时性的新型方案
MOS管选择注意事项
计算机在看图的时候,图像识别在看什么?
电磁继电器怎么接线_14脚电磁继电器接线图
人工智能对自动驾驶的影响
Go语言的默认机制
区块链是如何影响新闻业的
中科曙光科学计算云助力打造以油气勘探科研为基础的统一管理平台
一文读懂二极管的直流电阻和动态电阻
Grabity正在鼓励应用程序制造商将他们的应用移植到区块链上
Linux搭建Web服务
供应链上的物联网有怎样的挑战
开关电源软启动电路设计
面向对象编程练习
金士顿演示新款NVMe SSD产品线等