1eCos简介 要 eCos最大的特点是内核可配置。它出生于1997年,相对其他的系统来说是非常年轻的,但是也正是因为出身的晚,所以在设计理念上面是比较新颖的。其全部代码使用C++编写。 eCos可以说是嵌入式领域的一颗新星,全称是Embedded Configurable Operating System。绝大多数代码使用C++写作完成。最早是Cygnus公司开发(是不是想到Cygwin了?),不久被RedHat收购,现在RedHat又放弃了RedHat项目,解雇了eCos的开发人员,将他踢到了Free Found Org(这是我坚决不用RedHat的原因,太功利了)。 eCos最大的特点是模块化,内核可配置。如果说嵌入式Linux太庞大了,那么eCos可能就能够满足要求。它是一个针对16位、32位和64位处理器的可移植开放源代码的嵌入式RTOS。和嵌入式Linux不同,它是由专门设计嵌入式系统的工作组设计的。ECOS具有相当丰富的特性和一个配置工具,后者能够让你选取你所需要的特性。Linux兼容的嵌入式系统在内核裁减后编译出来的二进制代码大小在500k字节以上,这还只包含最简单的内核模块,几乎没有加载任何其他的驱动与协议栈。但是eCos最小版本只有几百个字节,一般,一个完整的网路应用,其二进制的代码也就100K字节左右。而且更为重要的是,eCos提供的Linux兼容的API能让开发人员轻松的将linux应用移植(这点和RTEMS很相似),与此同时,应用程序不用跑在Linux复杂的内核机制上(这套机制,对于大型服务器也许还凑合,但是对于短小精干的嵌入式应用,太浪费了),大大节省了你的晶振:)和RAM。 图1 eCos的配置界面 eCos 中字面上C(configurable) 表示的“高可配置性”。eCos 可以让开发者像在玩积木般地自由选择其执行期的元件,应用程序开发者可以针对自己的应用程序来设迟一个对其最小的RTOS环境,这跟以往应用程序就是跑在一个完整的RTOS上本质上不同,在嵌入式系统资源与内存寸土寸金的环境上,这样的开发方式是很重要的。在以往的嵌入式开发方式都是自己手工的将RTOS作缩减,对经验不足或对该RTOS不够熟悉的人将会花去许多时间,或是根本很难将RTOS拆开,但在eCos 上,由于设计之初就是朝向可设迟的原则,各种元件都遵守著模块化的开发方式,而应用程序开发者只要使用eCos 中的配置,即可轻松简单的对eCos 元件作量身打造,也不需对其内部实作有所了解即时RTOS的核心并提供标准系统API。eCos 的核心支持一般OS 常见的项目如驱动程序(Device Driver)、内存管理(Memory managemant)、异常处理(exception handling)、中断处理(exception handling)、线程的支持(thread support)、计时器(Timer)、计数器(Counter),对于即时RTOS的支持如完全优先(full preemptability)、最小中断延迟(minimal interrupt latencies )、线程同步(synchronization primitive)、可自定的调度原则(schedule policies)。此外也支持POSIX 等操作系统的标准API 及ANSI C 与常用的数学函数。支持常用的周边及通讯协议( networking stacks)支持以太网络卡,串口,USB slave等常用周边。并支持一般常用的通讯协议如IP、IPV6、ICMP、UDP、TCP、SNMP、HTTP、TFTP、FTP 等。网络设迟部分,可支持静态IP 与DHCP 。GDB支持可支持主控端使用GDB 远端透过串口或是以太网络对应用程序除错。 此外, eCos另一个优点是他支持非常多的平台和CPU,尤其是比较新的CPU比如ARM的各个系列,DSP(BlackFin)等。并且也支持很多硬件平台。目前支持的CPU包括: ARM, CalmRISC, FR-V, H8, IA32, M68K, Matsushita AM3x, MIPS, NEC V8xx, PowerPC, SPARC, SuperH 支持的硬件平台设备包括: Flash, Ethernet, 串口, USB, 时钟等。其已直接支持了时下绝大部分的硬件,可在eCos 官方网站上找到支持列表。具体的硬件支持情况可以参考http://ecos.sourceware.org/hardware.html,里面有长长的一个列表,大家可以根据自己的情况去看看。需要说明的是,这个硬件列表可能很久没有更新过了,最新的硬件列表可能需要访问开发者的邮件列表。 ECos的Licence eCos的专利受eCos license 所保护,这是一个GPL license 的修改版,其准许开发者在其上开发的应用程序(eCos 以外自行撰写的部分)可以不用跟著GPL 一起发布。应用程序开发者可免费的取得其完整的源码(buyout-free),并针对其作任意的修改与在其上开发自己的应用程序并发布,唯一的限制只是若有修改到eCos 本身,其需将修改的源码回报给eCos 开发小组。当开发者将其当为产品时,也不需支付版税(royalty-free)。可以看出,eCos的Licence比GPL要宽松。 eCos 上开发的应用程序架构图中File system 指的是对文件系统如ext2 等的支持,library 是上节所提包括POSIX,ANSI C 等的函数库。这张图,由上到下,表示从高层到底层的eCos架构。最底层的是我们的硬件,在硬件上面有HAL 与装置驱动程序,而我们大部分会利用eCos 工具去设中间kernel、networking stack、library 层(OS层),只留下我们需要的部分。最上层的应用程序就是我们自行撰写的部分,通过中间OS 层的辅助来达成我们的目的。由这张图,我们可以看出,Redboot 是一个架构在eCos HAL 与Device Driver 上的一套应用程序。其中与硬件最关系密切的就是HAL,可以用“最接近硬件的软件”来形容,HAL 将所有与硬件相关的地方对外隐藏在里面。针对不同的硬件时,只需换掉HAL,换上针对新硬件而撰写的HAL 即可。 本文有一些文字来源于eCos的文档以及台湾交通大学陈思豪等人的文章《嵌入式系统开机程式:RedBoot》。