uClinux操作系统的实时化bob综合体育官方入口分析
  • 时间:2022-05-10
  • 点击率:

介绍

嵌入式Linux作为一种开源操作系统,因其价格低廉、功能强大、易于移植而得到广泛应用。Clinux是专门为没有MMU(内存管理单元)的处理器设计的嵌入式linux,非常适合低端嵌入式系统的需求。Clinux在实时扩展上符合POSIX1003.1B的标准,但其最初的设计目标是一个通用的分时操作系统。如果将Clinux应用于工业控制和过程控制等微控制领域,必须提高Clinux的实时性。

目前嵌入式Linux的实时改造方案主要有三种:一种是直接修改内核插入抢占点[3],一种是资源内核方法2.Clinux内存管理,最后一种是双核架构方案。但三种方法中的前两种只能用于软实时应用,只有双核[2]架构方案才能满足硬实时应用的要求。目前,在Linux平台下开发的具有硬实时功能的系统主要有RTLinux和RTAI [1](实时应用接口)。基于RTAI增强linux实时性的研究很多,但基于RTAI增强Linux实时性的研究还没有成型的产品。因此,本文基于RTAI对Linux的实时改进机制,对Clinux的实时改进进行了分析和研究。

[4]

Linux标准使用虚拟内存技术,应用于带MMU的处理器。虚拟地址被发送到MMU,并且虚拟地址被映射到物理地址。Clinux和标准linux最大的区别在于内存管理。只有了解它们内存管理的差异,才能更好地利用RTAI实时改造Clinux。

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

在Clinux系统中,MMU的内存映射是缺失的,因此Clinux必须在可执行文件的加载阶段对可执行文件进行重新loc,以便在程序执行时直接使用物理内存。其次,Clinux没有自动增长栈,也没有brk()函数。用户空之间的程序必须使用mmap()命令来分配内存;同时,在实施多个流程时,需要进行数据保护。Clinux支持fork()函数,但本质是所有的多进程管理都是通过vfork()函数实现的。Vwork()是Clinux和标准linux应用程序开发最重要的区别。只有详细了解了vfork()和fork()的区别以及程序处理机制,才能顺利完成从Linux到Clinux的程序迁移。

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

3.1简介

RTAI for Linux[6]是双核架构Linux实时解决方案的典型代表。它由意大利米兰大学主办,是近年来非常活跃的开源项目。该系统的实现基于在Linux上定义一套实时硬件抽象层。RTHAL用于硬件管理,基本内核和实时内核结合在一起。一个内核的改变不会影响另一个内核的执行。RTHAL将RTAI在Linux中需要修改的部分定义为一组程序接口,RTAI只使用这组接口与Linux进行通信。其系统结构如图1所示。

3.2 RTAI的RTAI

RTAI从果核中提取了一个果实。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执行以下代码,用RTAI自己的分发服务器替换rthal.c_do_IRQ:

rthal.c_do_IRQ=dispatch_irq;


客服QQ: 点击这里
地址:台州市寨金路899号电子时代广场5116室 客服QQ:329435596
Copyright © 2022 bob综合体育官方入口 版权所有

08980-89895656

服务时间:7X10小时