嵌入式系统Linux实时化(一)Linux实时化技术路径

在嵌入式系统中,Linux 是一种广泛应用的操作系统。然而,传统的 Linux 系统是一个通用的分时操作系统,主要侧重于提供良好的平均系统性能和多任务处理能力,但在实时性方面存在一定的局限性。

实时系统要求任务能够在规定的时间内完成响应,对于硬实时任务,错过截止时间可能会导致系统失败甚至产生严重后果。在诸如工业控制、汽车电子、航空航天等许多嵌入式应用场景中,需要系统对外部事件进行快速、确定性的响应,这就促使了 Linux 系统实时化技术的发展。

一、什么是实时操作系统

对于实时系统(RealTime System),POSIX1003.b 的定义是:指系统能够在限定的相应时间内提供所需水平的服务。另一个由 Donald Gillies 提出的更为大家所接受的定义是:一个实时系统是指计算的正确性不仅取决于程序的逻辑正确性,也取决于结果产生的时间,如果系统的时间约束条件得不到满足,将会发生系统出错。

实时系统是确定的,因为在实时系统中 ,相应时间决定事件是有界的。

实时操作系统具有以下特点:

  • 时间约束性

实时系统的任务具有一定的时间约束(截止时间)。根据截止时间,实时系统的实时性分为"硬实时"和"软实时"。

硬实时是指应用的时间需求能够得到完全满足,否则就造成重大安全事故,甚至造成重大的生命财产损失和生态破坏,如在航空航天、军事、核工业等一些关键领域中的应用。

软实时是指某些应用虽然提出时间需求,但实时任务偶尔违反这种需求时对系统运行及环境不会造成严重影响,如监控系统等和信息采集系统等。

  • 可预测性

可预测性是指系统能够对实时任务的执行时间进行判断,确定是否能够满足任务的时限要求。由于实时系统对时间约束要求的严格性,使可预测性成为实时系统的一项重要性能要求。除了要求硬件延迟的可预测性以外,还要求软件系统的可预测性,包括应用程序的响应时间是可预测的,即在有限的时间内完成必须的工作;以及操作系统的可预测性,即实时原语、调度函数等运行开销应是有界的,以保证应用程序执行时间的有界性。

  • 可靠性

大多数实时系统要求有较高的可靠性。在一些重要的实时应用中,任何不可靠因素和计算机的一个微小故障,或某些特定强实时任务(又叫关键任务)超过时限,都可能引起难以预测的严重后果。为此,系统需要采用静态分析和保留资源的方法及冗余配置,使系统在最坏情况下都能正常工作或避免损失。可靠性已成为衡量实时系统性能不可缺少的重要指标。

商业实时操作系统

  • VxWorks:美国 Wind River 公司于 1983 年设计开发。以其良好的可靠性和实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。

  • QNX:由加拿大公司 Quantum Software Systems 开发。广泛应用于汽车(特别是车载信息娱乐系统和高级驾驶辅助系统)、工业自动化、航空航天、国防、医疗设备、网络设备和通信系统等领域。

  • INTEGRITY:具有高可靠性、实时性强的特点,被广泛应用于航空航天、军事、汽车等领域。

  • ThreadX:以其小巧、高效和确定性性能而著称,常用于对实时性和资源占用要求较高的嵌入式系统中,如一些工业控制设备、物联网设备等。

开源实时操作系统

  • FreeRTOS:适用于微控制器和小型嵌入式系统,具有轻量级、可裁剪、易于移植的特点,广泛应用于物联网设备、智能家居、工业自动化等领域。

  • μC/OS:小型、可裁剪的实时操作系统,具有低内存占用、高性能的特点,适用于资源有限的嵌入式系统,常用于工业控制、智能家居、智能穿戴等领域。

  • Zephyr RTOS:开源的实时操作系统,专为资源受限的物联网设备设计,轻量级、高度可配置、支持多种架构和丰富的设备驱动程序,在物联网领域应用广泛。

国产实时操作系统

道系统(Delta OS)

特点:由电子科技大学嵌入式实时教研室和科银公司联合研制开发,是全中文的嵌入式操作系统。提供强实时和嵌入式多任务的内核,任务响应时间快速、确定,不随任务负载大小改变。绝大部分代码由 C 语言编写,具有很好的移植性。

应用场景:主要应用于军工装备领域,如多兵种的装备等。也适用于航空飞行控制、航空舱管理、飞行模拟;工业控制中的机器人、计算机数控设备、过程自动化控制系统;通信领域的程控交换机、路由器;医疗监护仪、超声探测仪;消费电子的 PDA、机顶盒、数字照相机;汽车自动驾驶系统、防撞安全系统等。

翼辉(Sylix OS)

特点:内核自主化率达到 100%,拥有完全自主可控的技术能力,支持对称多处理器(SMP)平台,具有实时进程及动态加载机制,支持多种架构处理器,如 ARM、MIPS、PowerPC、x86、SPARC、DSP、RISC-V、C-SKY、LoongArch 等。硬实时内核,调度算法先进高效,兼容 POSIX 1003.1b 实时编程标准。

应用场景:面向轨道交通、智能电网、航空航天等多个领域,可用于轨道信号控制、车身稳定系统、变速控制系统、电力实时调度、智能电网、军用自组网通信系统等。

天脉系统(ACore OS)

特点:起源于航空工业计算所,具备高可靠性、低功耗等特点,系统架构设计精巧,内核支持多任务调度,内置丰富的驱动程序,提供高效的文件系统管理。

应用场景:主要用于机载电子设备,也广泛应用于工业自动化控制系统、航空航天飞行控制系统、智能家居设备等。

科东软件(Intewell OS)

特点:基于微内核架构的工业嵌入式实时操作系统,具有高度的可靠性和实时性能,拥有 170 + 件专利、50 + 项软件著作权,构建起了一套完整度较高的专利技术体系,相关核心技术自主可控。

应用场景:在轨道交通、能源电力、高端装备、航空航天、半导体、医疗及汽车电子等领域有着广泛应用,是国内唯一在工业控制、工业机器人、工业网络、飞机、汽车等领域均有应用的工业级网络操作系统。

赛睿德(RT-Thread)

特点:集实时操作系统内核、中间件组件和开发者社区于一体,具有高实时性能,能够满足嵌入式系统对实时性的需求,可伸缩性强,系统设计为可伸缩,可以运行在从几百字节内存的简单嵌入式设备到拥有大量内存的复杂系统,组件丰富,拥有丰富的组件库,包括文件系统、TCP/IP 网络协议栈、设备驱动框架等。

应用场景:广泛应用于能源、车载、医疗、消费电子、轨道交通、电力传输、工业自动化等众多行业。

二、Linux实时化与实时系统区别

主要技术区别:

Linux 实时化改造后与实时操作系统的区别主要体现在以下几个方面:

实时性

  • 传统 Linux:本身是通用分时操作系统,实时性相对较差,存在不可抢占区域,可能导致实时任务长时间等待。

  • Linux 实时化改造:通过如双内核架构、修改内核调度算法、内核抢占式补丁等技术手段,一定程度上提高了实时性,但在一些极端情况下,实时性能可能仍不如专门的实时操作系统稳定和高效。

  • 实时操作系统:从设计之初就以实时性为核心目标,具有确定性的响应时间和高效的任务调度机制,能严格保证硬实时任务在规定时间内完成。

内核架构

  • 传统 Linux:采用宏内核架构,内核代码庞大且复杂,包含了大量的设备驱动、文件系统等功能。

  • Linux 实时化改造:通常在宏内核基础上进行修改和优化,以实现实时化功能。

  • 实时操作系统:大多采用微内核架构,内核只保留了最基本的功能,如任务调度、中断处理等,其他功能以模块或服务的形式在用户态运行,提高了系统的稳定性和可扩展性。

资源占用

  • 传统 Linux:资源占用相对较大,启动时间较长,需要一定的硬件配置支持。

  • Linux 实时化改造:虽然经过优化,但由于其基础架构的限制,在资源受限的环境中可能表现不如轻量级的实时操作系统。

  • 实时操作系统:通常具有轻量级的特点,资源占用少,启动速度快,能够在资源有限的嵌入式设备上高效运行。

开发难度和成本

  • 传统 Linux:开源且有庞大的社区支持,开发资源丰富,开发难度相对较低,但实时化改造需要一定的技术水平和开发经验,可能增加开发成本和周期。

  • Linux 实时化改造:在实时化过程中可能会遇到一些技术难题,需要对内核进行深入的理解和修改,对开发人员的要求较高。

  • 实时操作系统:部分商业实时操作系统开发工具和文档相对完善,但授权费用较高;开源实时操作系统虽然免费,但可能社区支持相对较小,开发难度可能较大。

安全性

  • 传统 Linux:安全性主要依赖于其开源社区的不断更新和修复漏洞,但由于其复杂性和广泛的应用场景,可能存在较多的安全隐患。

  • Linux 实时化改造:在实时化过程中可能会引入新的安全风险,需要额外的安全措施来保障系统的安全性。

  • 实时操作系统:一些实时操作系统在设计时就考虑了安全性,具有诸如内存保护、容错机制等安全特性,能更好地满足对安全性要求较高的应用场景。

应用场景对比:

Linux 实时化主要应用领域

  • 工业自动化领域:适用于对实时性要求不是特别苛刻,同时需要复杂的网络功能、丰富的软件资源和良好的人机交互界面的工业控制系统,如一些智能工厂中的监控系统、生产管理系统等。

  • 智能交通领域:可用于交通信号控制、智能公交系统等对实时性要求相对较低,但需要处理大量数据和复杂业务逻辑的应用场景。

  • 消费电子领域:在一些智能家电、智能手机等设备中,Linux 实时化改造后可以满足设备对实时响应和多任务处理的需求,同时还能利用 Linux 的开源生态和丰富的软件资源提供更多的功能和服务。

实时操作系统主要应用领域

  • 航空航天领域:如卫星控制系统、飞机导航系统等,对实时性、可靠性和安全性要求极高,必须使用专门的实时操作系统,如 VxWorks、INTEGRITY 等,以确保系统的稳定运行和任务的及时响应24。

  • 汽车电子领域:特别是对于发动机控制、自动驾驶辅助系统、安全气囊系统等关键部件,需要使用实时操作系统,如 QNX、μC/OS 等,以保证系统在极短的时间内对各种传感器信号进行处理和响应12。

  • 医疗设备领域:如心脏起搏器、医疗监护仪、手术机器人等,对实时性和安全性要求极高,通常采用 QNX、VxWorks 等实时操作系统,以确保患者的生命安全24。

  • 军事国防领域:在导弹制导系统、雷达系统、军事通信系统等,需要使用高性能、高可靠性的实时操作系统,如 VxWorks、INTEGRITY 等,以满足军事应用对实时性和安全性的严格要求24。

三、Linux实时化技术方案

随着人们的不断研究和实践,Linux实时化的方案有很多。但究其根本,都是围绕着两个方向来做的改进:一是改进现有的 Linux 内核,使之能满足相关的实时性指标;二是在现有的Linux内核外构建一个专门处理实时任务的实时内核,接管实时性要求相对较高的任务。

此外,近年来又出现了一种使用虚拟机来完成Linux实时应用的方案,其实现原理类似于双内核的Linux实时化方案,但以虚拟机系统取代了实时内核。

(1)改进内核方案

改进路线方案包括 MontaVista Linux、TimeSys Linux、RT-Preempt Patch、ART-Linux 等。

  • MontaVista Linux

MontaVista 是由 Jim Ready 在 1999 年创立的专注于嵌入式 Linux 的公司,而 JimReady 本身也是第一个商用实时操作系统 VRTX 的创造者。MontaVista 对于 Linux 实时化起了巨大的推动作用,数年间共有 20 多位 Mainline Linux Kernel 的开发者来自 MontaVista,很多的标准内核的实时化改进就来自于 MontaVista。

MontaVista Linux是MontaVista软件公司的产品,是业界领先的实时Linux,可以满足用户对可预测性、稳定性以及高级 I/O 支持的要求。MontaVista 可抢占内核技术明显降低了内核的延迟和抖动,保证了 100us 以内的系统最坏响应时间,可以达到甚至超过绝大多数实时性处理的要求。MontaVista 专业版(Professional Edition)通过引入 O(1)调度、高精度定时器(HRT,High Resolution Timers)、高速实时域(FRD,Fast Real-Time Domain)函数库等多种技术来达到实时性的最佳表现。使用 HRT,编程人员能实现微秒级精度的基于时间、事件驱动的新算法,减少作 CPU 时钟周期的轮询和空循环的时间开销。FRD 使用新的本地 POSIX 线程库(NPTL,Native POSIX Thread Library)提供一个线程中断上下文,保持最高级别的实时中断响应。MontaVista Linux 是一个成熟的商业化实时 Linux 解决方案。

  • ART-Linux

ART-Linux(Advanced Real-Time Linux)被广泛的应用于日本的机器人项目中。ART-Linux对标准内核的改进主要集中在对标准中断处理的改进,通过中断还原(interrupt poling)来实现中断处理。同时,ART-Linux 也实现了内核互斥锁(kernel mutex)的优先级继承。由于ART-Linux 只是一个半开源的项目,相关资料不多,无法对其进一步分析。

  • TimeSysLinux

TimeSys 很早就发布了实时 Linux 的商业版以及 GPL 版,是通过消除 Linux 实时限制来改善 Linux 实时性的典型。TimeSys Linux 将中断(IRQ)和软中断(soft IRQ)全部都线程化并赋予了不同的优先级,实时任务可以获得比中断线程更高的优先级。同时,它使用互斥锁(Mutex)替代自旋锁(Spin Lock)来使得自旋锁完全可抢占。它也对调度器做了优化,引入了复杂度为O(1)的调度器(注:因为使用 2.4 内核)。由于将中断线程化了,很多的中断关闭就失去了必要,从而消除了很多的中断关闭区域。它还通过预定 CPU 和网络资源来改善实时性。但这样的实现依然很难满足硬实时性。因为即使中断关闭以及不可抢占的区域大量减少,但是依然存在 。而且一部分中断仍然不能线程化,例如时钟中断等等。

  • RT-Preempt Patch

RT-Preempt Patch 通过对Ingo Molnar的Realtime Preemption patch 以及 Thomas Gleixner的有着高精度支持的通用时钟时间层的整合,来完成内核的实时化改进。RT-Preempt Patch 获得了业界的广泛关注,它简洁的设计风格以及向 Mainline Linux Kernel 整合的设计目标使得它成为实时应用的一个很有吸引力的选择。而且 RT-Preempt Patch 的很多改进也确实并入了Mainline Linux Kernel。

RT-Preempt Patch 通过以下的几点,把 Linux 变成一个完全可抢占的内核:

通过实现实时互斥锁(rtmutexes)使得原本使内核里的锁原语(使用自旋锁)可以被抢占原本被 spinlock_t 和 rwlock_t 等保护的临界区变为可抢占区域,但是使用raw_spinlock_t(类似 spinlock_t 的相同的 API)仍然能(在内核中)创建不可抢占区域。

对内核中的自旋锁和信号量实现了优先级继承。

将中断处理程序转变成可抢占的内核线程:RT-Preempt Patch 在内核线程上下文中处理软中断,而软中断也被类似于用户层进程的数据结构代表。当然,原本的在内核中上下文中登记中断的方式依然可以使用。

将原本的 Linux 定时器 API 转化为几个基本结构,包括几个高精度内核时钟以及一个计时溢出时钟,使得用户空间的 POSIX 定时器获得了高精度。

(2)双内核方案

双内核方案包括RT-Linux,RTAI,Xenomai等。

  • RTLinux

RTLinux 是由美国新墨西哥州的FSMLabs(Finite State Machine Labs,优先状态机实验室)开发的实时嵌入式 Linux 系统,也是双内核实时 Linux 的创导者和典型代表。到目前为止 ,RTLinux 已经被成功地应用于航天飞机的空间数据采集、科学仪器测控和电影特技图像处理等各个领域,在电信、工业 控制 以及航空航天等各个实时领域都有成熟的应用。

RTLinux 的开发者并没有为了满足实时操作系统的特性来改写 Linux 的内核,而是另辟蹊径,在标准 Linux 内核之外构建了一个实时内核。 [10] 之后,将 Linux 的内核代码略作修改,使 Linux 本身的任务和 Linux 内核本身作为优先级很低的任务运行在实时内核之上,而实时任务则作为优先级最高的任务来运行。这样,在存在实时任务的情况下实时任务会被优先执行,只有在没有实时任务的情况下才会运行 Linux 本身的任务。RTLinux 可以创建完全符合POSIX1.B 标准的实时进程。下图是 RTLinux 的系统层次图。

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

RTLinux/Pro 是一个由 FSMLabs 开发的完全商业版本的实时 linux。RTLinux/Free 是一个由社区开发的开源版本。

  • RTAI

RTAI 全名为 real-time Application Interface,即实时应用接口,是由DLARM-RTLinux 加以改良而来的一套用来编写实时应用程序的系统界面。RTAI跟 RTLinux 的运行原理基本一样,都是"架空"Linux 内核,在其下运行一个实时内核。RTAI 将原本 RTLiunx 的进程调度管理程序加以保留,此外加入了一些新的功能与特性。改良的部分主要集中在实时时钟上,除了新加入周期性计时(Periodic timing)之外,用处理器的 TSC(Time Stamp Clock)取代了RTLinux 原本的基石方式,这样就在很大程度上改善了单次计时(One-shot Timing)的效能。

下图为 RTAI 的系统架构图,与之前的RTLinux系统层次比较可以发现, RTAI 和RTLinux在系统架构上并没有太大的差别。两者最大的不同之处在于,RTAI 在 Linux 之上定义了一组实时的硬件抽象层(RTHAL,Real-Time Hardware Abstraction Layer)。RTHAL将 RTAI 对 Linux内核需要修改的部分整合起来并定义为一组系统界面,RTAI通过这组界面与Linux进行沟通这样带来的直接优势是可以将对 Linux 内核源码的修改量减到最小,也就减少了未来 RTHAL移植到新版的 Linux 内核的工作量。除了加入 RTHAL 之外,RTAI 也加入了自己的实时内核 ,用来处理实时任务。这个实时内核与 Xenomai 一样都是采用的 Adeos,后面会详细介绍。实际上采用这种模块化设计最大的好处是,RTAI 可以很方便的改用其他实时内核来跟 RTHAL进行沟通。

  • Xenomai

Xenomai 的运作机制与 RTAI 极其相似,两者甚至在一段时间合并为同一项目,后又分开 。Xenomai 是本次实时化改造实际采用的方案,后述会详细讨论,这里不展开讲解分析。

相关推荐
TDengine (老段)11 分钟前
TDengine 开发指南——高效写入
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
Geometry Fu1 小时前
物联网控制技术期末复习 知识点总结 第二章 单片机
单片机·嵌入式硬件·物联网·51单片机·期末复习
中科岩创2 小时前
某校体育场馆结构自动化监测
大数据·人工智能·物联网·自动化
FreakStudio11 小时前
一文速通 Python 并行计算:12 Python 多进程编程-进程池 Pool
python·嵌入式·面向对象·多进程·并行计算·电子diy
TDengine (老段)16 小时前
TDengine 的 AI 应用实战——运维异常检测
大数据·数据库·人工智能·物联网·时序数据库·tdengine·涛思数据
咏颜17 小时前
ESP32对接巴法云实现配网
经验分享·mcu·物联网·iot
qq_259297247318 小时前
文件IO流
linux·c语言·物联网
远创智控研发五部18 小时前
工业智能网关保障冷冻仓储设备无人值守安全运行
物联网·远程监控·工业自动化·边缘计算网关
RFID舜识物联网18 小时前
RFID测温芯片助力新能源产业安全与能效提升
大数据·人工智能·嵌入式硬件·物联网·安全
TDengine (老段)1 天前
TDengine 高级功能——流计算
大数据·物联网·flink·linq·时序数据库·tdengine·涛思数据