转自:
http://www.eetop.cn/blog/html/04/343504-14129.html
eCos嵌入式实时操作系统应用分析
随着 EOS(Embedded Operation System, 嵌入式操作系统 ) 在工业控制领域内的广泛应用,操作系统的实时性成为一个日益被关注和重视的问题。
当前主流的 EOS 一般可分为两类, 一类是商业级的嵌入式操作系统,这类操作系统都由知名公司开发与维护,在技术支持与服务上都有较好的保证,如 VxWorks 、 QNX 、 WinCE 等,但这类产品一般使用许可证比较昂贵,且不公开核心代码,这就与嵌入式设备的用户定制性较强、升级换代快等特点相违背。另一类则是逐渐兴起的源码开放的嵌入式操作系统,如嵌入式 Linux 、 eCos 等,由于这类系统具有用户可定制性好、费用低廉等优势,从目前看来,它们已成了嵌入式操作系统应用的主要推动力。
嵌入式Linux 操作系统
嵌入式 Linux 系统是标准 Linux 在嵌入式领域的延伸,其特点和功能与标准 Linux 几乎完全相同。 Linux 系统的稳定性和健壮性已经在真实世界中得到了证明,在工业控制领域也有许多非常成功的应用。但是,在针对一些有较强实时性要求的特定工业应用中, Linux 系统仍然暴露 出 了许多技术缺陷。其主要原因是因为 Linux 系统起初是为 PC 开发的,在功能和性能选择上更多的兼顾了 PC 应用的特点,追求系统的功能完备性和整体性能最优。这一点在 Linux 系统的调度策略上表现的尤为明显,如任务之间采用的是基于 分时技术 ( time-sharing ) 的调度策略,而且不支持内核态抢占式调度,这样系统就无法保证紧急任务总是会被优先执行,且调度延迟不确定,是随机可变的。
因此,有相当多机构和公司都在研究如何提高 Linux 实时性能,并取得了一些富有成效的成果。同时,开源社区也做着同样的事情,那就是 Linux 2.6 版本的开发。开源社区采用的实时化思想是直接对 Linux 内核的调度机制和算法进行修改和优化。 Linux 2.6 内核开发大约是从 2001 年开始,经过三年左右的开发,在 2004 年发布了稳定版本,经过了这几年的测试与改进,已经在桌面 PC 和服务器领域内得到了大量使用,在嵌入式系统上的应用也在不断发展中。 Linux 2.6 版本中与实时性相关的改进主要体现在以下几个方面。
⑴ 调度计算的分散性。 2.6 版本中采用了由 Ingo Molnar 实现的调度算法,该算法将进程优先级的计算分散在多处进行,而不是集中在一个统一的调度函数中,这样不仅提高了计算效率,还减小了 CPU 因集中调度计算所消耗的时间,并且使调度器的时间开销是与系统负载无关,是 O(1) 恒定的。
⑵ 抢占式内核的支持。 2.6 版本中提供了对抢占式内核的支持,而 2.4 内核是不支持内核抢占的。支持抢占式调度是实时操作系统的标志之一,这也是早期 Linux 系统应用于实时应用时最为诟病的地方。
⑶ 系统同步机制的改进。 2.6 内核中则对系统中同步机制的使用进行了优化,大大减小了因同步机制引起的时间消耗。
⑷ 更细的时间粒度。在 2.6 内核中,定时器的频率被定义为 1000Hz ,而 2.4 内核中为 100Hz 。
虽然, Linux 2.6 系统仍然不是严格实时系统,但它的实时性能得到了很大提高却是个不争的事实,有关文献采用统计的方法对 Linux 2.6 和 2.4 内核中任务响应和中断响应的进行了 310 万次测试,然后对平均响应时间和最坏响应时间进行了对比,下图 (a) 和 (b) 给出了时间比较结果。从结果可以看出 2.6 内核的实时响应能力要远高于 2.4 内核,差距至少在十多倍以上。这一结果更增强了用户将 2.6 内核应用到各种非严格实时应用中的信心。
a 平均响应时间
b 最坏响应时间
中嵌科技多年来一直关注 Linux 系统在工业控制领域的应用,所提供的全系列嵌入式产品已全部支持基于 2.6 内核的嵌入式 Linux 系统,并针对不同工业应用的实时性要求进行深入的应用研究。
eCos ( Embedded Configurable Operating System ,嵌入式可配置实时操作系统)
eCos ( Embedded Configurable Operating System ),嵌入式可配置操作系统,是 Cygnus 公司 1998 年推出的嵌入式实时操作系统解决方案。 eCos 的一个主要设计目标是实现系统的高度可配置能力,为实现这一目标,它将系统分为不同的软件组件。这些软件组件具有可重用性,根据实际应用的需要,通过其独特的配置工具可以选择使用相应的组件,同时对每一个选择使用的组件,用户还可以对每个选项进行更细致的配置,可以增加或删减组件的某些功能,从而实现完整的嵌入式操作系统。使用这种方式最后产生可执行的 eCos 映像文件非常紧凑,只包含应用所需的特定功能,这样使得 eCos 系统与许多传统的 RTOS 相比、系统的运行速度更快,稳定性更高。
除了高度可配置能力之外, eCos 所追求的目标还包括移植性和兼容性,因此 eCos 采用了与 Linux 类似的模块化设计,将不同功能的软件分成不同的组件,这些组件具有可重用性,分别位于系统的不同层次。下图是 eCos 系统的层次结构图。
eCos 的层次结构图
eCos 操作系统遵循的许可证与 GPL 兼容,而且比 GPL 更自由,用户可以在产品开发中免费的,自由的使用 eCos 操作系统,包括其开发工具;除涉及到对 eCos 系统本身的修改以外,用户的应用程序可以不公开,这一点既显著减少了开发者的开发成本,又最大限度的保护了开发者的利益。
eCos 是一个适合于深度嵌入式应用的实时操作系统,提供了普通嵌入式应用中所需要的全部功能,对嵌入式系统开发中涉及到的许多特定技术需求也有很好的支持。
⑴ eCos 的调度内核是一个嵌入式硬实时内核,并且内核设计时在调度策略选择、防止优先级反转、中断与异常的处理模式、中断处理的最短延迟以及内存分配方式等方面都做了许多精巧的设计,使其在系统的实时性能上有了良好的表现。
⑵ eCos 的硬件抽象层 HAL ( Hardware Abstraction Layer )通过向其他组件提供标准的 API 函数的机制,屏蔽了底层的 CPU 架构与平台的特定信息。这样用户只需编写少量代码就能方便地将 eCos 移植到自己的特定平台上,因此提高了 eCos 的移植能力,迄今为止 eCos 已经成功地移植到了 ARM 、 Fujitsu FR - V 、 Hitachi H8/300 、 Intel x86 、 Matsushita AM3x 、 MIPS 、 NEC V8xx 、 PowerPC 、 Samsung CalmRISC16/32 、 SPARC 、 SPARClite 、 SuperH 等平台上。
⑶ ISO 标准 C 库和 math 库支持,兼容各种常见 C 函数和数学函数调用。
⑷ 支持 POSIX 和μ ITRON3.0 两种类型的兼容层,使许多在不同平台和系统上开发的应用程序可以比较容易的移植到 eCos 系统上。
⑸ 支持完整的 TCP/IP 协议栈,以及上层的各种常用标准协议,便于嵌入式设备的网络连接。
⑹ 支持多种外部设备,包括标准串行设备、以太网控制器、 Flash 存储器、 USB 设备、 LCD 显示设备以及 PCI 设备等。
⑺ 支持 GDB 调试。 eCos 系统中内嵌了 GDB stub ,通过使用 GDB stub 与 GDB 主机进行通信,用户可以在不使用仿真器的情况下,通过串口或网络对嵌入式目标系统上应用程序进行调试。
⑻ 支持多种文件系统,尤其对 JFFS2 文件系统支持良好。
因此,与绝大多数嵌入式实时操作系统相比较, eCos 在系统可配置性、源码开放性以及功能方面的某些特性上具有较为明显的优势,这也是 eCos 取得成功的主要原因。
可以认为, eCos 和 Linux 是一脉相承的嵌入式操作系统,首先,它们的功能都非常强大,均包含了嵌入式应用的几乎全部功能,并在不同应用领域相互补充,其次,它们都是遵循 GPL 协议源代码开放的系统,保证了应用系统的可持续开发,最后,它们都遵循 POSIX 标准,保持了良好的兼容性,基于 Linux 的应用程序几乎可以加不改动,直接在 eCos 平台上运行。
中嵌科技多年来一直跟踪高性价比 RTOS 的发展,并在不同应用领域进行深入的应用研究, eCos 具有比其它 RTOS 更适用于嵌入式工业控制的特点。目前,中嵌科技已成功将 eCos 成功移植到诸如 AT91SAM7 系列、 AT91SAM9 系列、 AT91RM9200 、 EP93XX 系列等多款工业级嵌入式 微处理器上,实现了完整的 TCP/IP 协议栈、 RAM/ROM/JFFS2 文件系统,以及诸如 RS232/RS485 串行接口、 RTC 、 SPI 、 IIC 、 CAN 、 WatchDog 、 ADC 、 DAC 等常用外设的支持,并成功应用到多个工业控制系统。
作者:吴金华