Linux 平台RTOS 通用仿真环境的设计与实现

来源:互联网 发布:装饰图片的软件 编辑:程序博客网 时间:2024/05/20 17:24

Linux 平台RTOS 通用仿真环境的设计与实现
李霞,亓雪冬
中国石油大学信息与控制工程学院,山东 257062

摘要:实时操作系统和嵌入式系统软件的开发调试往往受到特定的硬件平台的限制,缺乏相应的硬件资源
将无法有效的研究这些软件。文章首先分析和研究了多种流行开源实时操作系统的平台相关性,然后阐述
了在Linux 系统上实现RTOS 通用仿真环境LinuxVAL(Linux Virtual Abstract Layer)的设计思想和设计原
理,最后成功将uC/OS-II 和FreeRTOS移植到了LinuxVAL仿真环境并给出了分析结果。实践表明,LinuxVAL
是开发研究RTOS 的理想手段。

关键词:实时操作系统,嵌入式系统,Linux 仿真环境

1 前言

       近年来,随着电子、计算机等相关 IT 技术的发展,嵌入式领域越来越受到人们的更多关注,嵌入式产品也越来越多的走进人们的视野,成为人们生活中不可或缺的组成部分。目前在大部分嵌入式软件的开发中,人们已经基本摒弃了完全用汇编、在没有操作系统的环境中开发程序的旧的开发模式,而是采用基于嵌入式操作系统或实时操作系统支持的多任务开发方案。在操作系统的支持下,嵌入式软件的开发具有模块化程度高,代码复用率高,支持高级语言、多任务和设计简便等很多优点。然而,实时操作系统和相关系统软件的开发和研究往往受到特定的硬件平台的限制,缺乏相应的硬件资源和软件开发环境将无法深入的研究和开发这些软件。
      
       目前解决这个问题主要有两种有代表性的方案:一种是仿真硬件开发环境,例如 BOCHS,skyeye 等等;另一种是直接将嵌入式系统软件建立在桌面操作系统的API 上,例如uC/OS-II 的windows 和linux 移植,nut/os 的linux 移植等。但第二种方案多是对特定软件的特定实现,不具有通用性;并且具有以下缺点:⑴采用了多线程模拟多任务的机制,资源占用率高,⑵由于windows 和linux 线程机制的特点,不能完全避免竞争条件。通过对第二种方案的深入分析和研究,我们在Linux 平台下设计和实现了通用RTOS 仿真环境LinuxVAL ( Linux Virtual Abstract Layer),并将uC/OS-II 和FreeRTOS 移植到LinuxVAL 环境中稳定运行,它具有移植接口统一,可扩展,单线程模拟多任务,资源占用率低等优点。

2 RTOS 平台相关性分析


       经 过 深 入的研究以下几种RTOS , 如uC/OS-II、FreeRTOS、nut/os,我们发现实时操作系统代码本身大致可分两部分:为与硬件无关部分和与硬件相关部分,如图1 所示。与硬件无关部分位于实时操作系统架构的顶部,是实时操作系统内核的核心部分,整个操作系统内核的逻辑和功能主要都是在这一部分来实现的。这些功能主要包括任务管理(任务的创建、删除、挂起、恢复和改变优先级等),时间管理(使任务睡眠或延迟),任务间通信与同步机制(信号量、互斥体、消息队列、时间标志等等),内存管理(内存的分配与回收)等等。与硬件相关部分存在于操作系统硬件无关模块和底层硬件平台之间,为位于它上层的模块提供必要的访问硬件的接口,这部分代码量比较小,主要包括进出互斥体,初始化任务堆栈,环境切换,中断处理程序等等。

       实时操作系统内核的这种组织结构分离了硬件无关部分和硬件相关部分,使它们之间的耦合性降低,便于将系统移植到不同的硬件平台上。实际上,uC/OS-II、FreeRTOS、nut/os 的可移植性非常强,它们都已成功的移植在数种到数十种不同的硬件架构中。

3 LinuxVAL 的设计与实现

3.1 LinuxVAL 设计思想

       由上小节的分析可知,在实时操作系统中,只有一小部分代码与硬件平台直接相关。这部分平台相关代码主要涉及开关中断,保存中断状态,构造任务初始堆栈,切换任务堆栈及任务环境等功能。我们由此受到启发,在Linux 平台之上实现了实时操作系统的通用仿真环境LinuxVAL——Linux Virtual Abstract Layer。

       RTOS 可将LinuxVAL 看成一台虚拟的计算机。LinuxVAL 具有中断并且能够为RTOS 的硬件相关代码提供对应于操作LinuxVAL虚拟计算机的各种函数调用。通过这些函数调用,RTOS 可以像在真正的硬件上一样完成必要的操作,实现所需要的功能。RTOS与LinuxVAL 的关系如图2 所示。可以看出,图2 中下方的LinuxVAL 代替了图1 中的底层硬件平台部分,向上支持操作系统内核。

       基于以上分析和设计原则,我们所设计的 LinuxVAL 具有以下特点:

       (1) 通用性:为了使更多的RTOS 可以很方便的移植到LinuxVAL 虚拟环境中,需要提供尽量简单并且抽象的硬件接口函数。这些硬件接口函数并不与某个特定的RTOS 相关,而是将RTOS 移植中通常必需的、并且是非常基本的硬件操作抽象出来。

       (2) 高效性:由于在真正的硬件平台上代码执行的非常快,因此每秒钟任务的切换次数可能非常多。为了使在LinuxVAL 仿真环境中可以比较真实的反应实时操作系统运行中的各种状态,需要每秒钟最大的任务切换次数在200 以上。
       (3) 透明性:在将RTOS 移植到LinuxVAL 虚拟环境的过程中,LinuxVAL 向上提供了RTOS 需要的所有硬件相关接口函数,RTOS 通过这些函数调用实现了在真正的硬件上所能实现的功能。RTOS 不需要直接操作Linux 所在的主机系统,因此整个Linux 系统对上层RTOS 透明。

3.2 LinuxVAL 实现原理

       从 RTOS 的角度看,LinuxVAL 是一台高级的计算机,在真正的硬件系统上需要的复杂的汇编操作在这里可以通过简单的高级语言函数调用来实现。

       LinuxVAL 主要由三部分组成,其各个部分的功能划分如图3 所示。

       一是中断系统,它是 LinuxVAL 的核心组成部分,它由Linux 系统中的信号机制来实现。设置好SIGALRM 信号对应的中断处理程序和产生SIGALRM 信号的时间间隔后,每当SIGALRM 信号出现,系统会立即中断正在运行的任务转而执行SIGALRM 信号对应的信号处理程序,并且在它的信号处理程序中系统会自动暂时阻塞当前信号,使得不会自动出现同一信号的嵌套,这与真正的硬件中断非常相似。另外中断系统还实现了开中断,关中断,设置中断向量等通常硬件平台所能实现的功能。开中断即反阻塞中断信号集,使得当前线程可以接收到信号,从而可以触发信号处理程序;关中断即阻塞中断信号集,使得当前线程不能接收到信号,因此当前线程也就不会被这些信号打断;设置中断向量即在我们预置的中断向量表中注册中断处理函数,这也与真正的硬件系统相似。当前系统只支持一个时钟中断,但由于系统设计时预留了多个中断向量,因此可根据实际情况扩展支持多个中断。

       其次是任务管理系统,它包括创建任务环境,保存任务环境,恢复任务环境等功能。在uC/OS-II和nut/os 对Linux 的移植中,实时操作系统中的任务由主机操作系统的线程来模拟,每一个任务都对应一个线程。这种实现的缺点是资源占用率高,并且由于windows 和Linux 的线程机制的特点,在线程切换时可能存在竞争条件(切换时需要先启动待切换的线程,再停止当前线程,这之间存在一个时间窗口)。由此,我们创新的提出使用Linux 单线程来模拟实时操作系统的多个任务的实现方案。通过Linux 的glibc 库函数getcontext,setcontext,makecontext,使得在仅有一个线程的条件下可以设置、保存和恢复到不同的任务环境中。这种方法完全避免了竞争条件,减小了资源占用率。

       第三部分是高精度的时间测量系统,包括启动延时器,停止延时器等功能。它通过使用汇编指令rdtsc操作Pentium 的高精度时间计数器来实现,测量精度可达到毫秒级,可用于精确测量代码段的执行时间。

4 LinuxVAL 应用实例与分析

       由于 LinuxVAL 在设计时充分考虑了通用性和透明性等原则,因此将实时操作系统移植到LinuxVAL 的过程相对比较简单。目前,我们已经成功将uC/OS-II 和FreeRTOS 移植到了LinuxVAL虚拟环境中,并增加了多个应用实例,移植过程非常简单,其核心思想是将实时操作系统中与硬件相关部分改由LinuxVAL 的函数调用来实现。图4 为应用实例的截图。

       图 4 上部所示为:使用针对LinuxVAL 移植的uC/OS-II 内核所创建的应用程序的截图。这个应用创建了1 个idle 任务,1 个统计任务,1 个管理任务,另外还有10 个字符任务,这10 个任务中每个都保存了与0-9 相对应一个字符,并不停的随机将这个字符放在窗口中的某个位置,然后延时1个时钟嘀嗒。我们将系统的时钟嘀嗒设置为每秒钟500 次,即每秒500 次时钟中断。从图中,每秒钟任务交换次数可达到每秒5000 次以上,这说明 LinuxVAL 具有承受较高的任务交换压力的能力,比较真实的反应硬件系统的状况,支持RTOS 的开发和研究。

       图 4 下部为:使用针对LinuxVAL 移植的FreeRTOS 内核所创建的应用程序的截图。这个应用共创建了12 个任务,其中包括1 个idle 任务,1 个管理任务,10 个计算任务,各个计算任务连续计算不同弧度的正弦值和余弦值。在这个应用中,计算正弦值和余弦值的功能并不是实时操作系统内核提供的,而是使用了glibc 的数学函数库。另外,这些应用程序的显示部分都是用了ncurses 库。由此可见在LinuxVAL 仿真环境中,应用程序可以利用Linux 系统中丰富的库函数,方便实时操作系统及应用的开发和调试。

5 结论

       通过对多种实时操作系统平台相关性的分析和研究,本文在 Linux 系统上实现了RTOS 通用仿真环境LinuxVAL 并且已经成功地将uC/OS-II 和FreeRTOS 移植到LinuxVAL 仿真环境中稳定运行。通过LinuxVAL,人们可以方便的在Linux 主机平台上开发、研究各种RTOS 及其应用程序。然而,LinuxVAL还有许多需要改进和扩展的地方。下一步我们将在此基础上优化其性能,扩展其功能,支持多中断,实现串口和网络仿真,用以更真实的满足上层RTOS 对硬件平台的需求。

参考文献
[1] W. Richard Stevens . “UNIX 环境高级编程”[M]. 机械工业出版社,2002 年2 月。
[2] Jean J. Labrosse . “嵌入式实时操作系统uC/OS-II”[M].北京:北京航空航天大学出版社,2003 年5 月。
[3] 沈美明温冬婵. “IBM-PC 汇编语言程序设计” [M].北京:清华大学出版社,1991 年6 月。
[4] Werner.Zimmermann. “uCOS-II - Port for the LINUX Operating System” [EB/OL].
http://www.it.fht-esslingen.de/~zimmerma/software/uCOS-II_LINUX.htm
[5] GNU C Library[EB/OL]. http://www.gnu.org/software/libc/manual/
[6] FreeRTOS A portable RTOS kernel for small embedded systems [EB/OL]. http://sourceforge.net/projects/freertos
[7] Ethernut Open Source SW/HW project for Embedded Ethernet applications [EB/OL]. http://www.ethernut.de/
[8] pico]os a highly configurable and very fast RTOS [EB/OL]. http://picoos.sourceforge.net/index.html

A Design and Implementation of common RTOS emulation environment on Linux System
Li Xia,Qi Xuedong
Department of Information and Control Engineering China University of Petroleum Shandong 257062

Abstract:The specific hardware platforms are usually necessary resource to study and debug realtime operation
systems and embedded system softwares and we can not study these softwares effectively without relevant
hardwares in common. This paper first analyses and studies the platform dependent codes of several popular
OpenSource RTOS, and then proposes the design thinking and priciple about how to implement RTOS common
emulation environment LinuxVAL(Linux Virtual Abstract Layer) on linux system. At last, we port uCOS-II and
FreeRTOS to LinuxVAL successfully. The analysis results show that LinuxVAL is a useful tool for studing RTOS.
Keywords:RTOS, embedded system, Linux emulation environment
原创粉丝点击