码迷,mamicode.com
首页 > 其他好文 > 详细

嵌入式可配置实时操作系统eCos(转)

时间:2020-12-25 12:56:03      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:dde   并且   内容   功能   row   通用   linux   对组   资源   

技术图片

eCos是为嵌入式应用设计的无版税开放源代码的实时操作系统。eCos的高度可配置性,允许对操作系统进行定制,以精确地匹配应用需求,提供最佳运行时性能和最少硬件资源占用。一个欣欣向荣的网络社区已经围绕eCos成长起来,可以确保持续的技术创新和广泛的平台支持。——eCos官网对eCos的介绍

mingdu.zheng <at> gmail <dot> com
http://blog.csdn.net/zoomdy/article/details/14051615

转自:https://blog.csdn.net/zoomdy/article/details/14051615?utm_medium=distribute.pc_relevant_download.none-task-blog-baidujs-1.nonecase&depth_1-utm_source=distribute.pc_relevant_download.none-task-blog-baidujs-1.nonecase

简介

eCos(embedded Configurable operating system),中文翻译为嵌入式可配置操作系统或嵌入式可配置实时操作系统。适合于深度嵌入式应用,主要应用对象包括消费电子、电信、车载设备、手持设备以及其他一些低成本和便携式应用。eCos是一种开放源代码软件,无任何版权费用。eCos具有很强的可配置能力,而且它的代码量很小,通常为几十到几百KB。它的最小配置形式是它的硬件抽象层HAL所提供的引导程序RedBoot,可以支持很大范围内许多不同的处理器和平台。它的最大配置形式是一个完整的实时操作系统,所提供的服务和支持能与其他大多数商用实时操作系统相媲美。eCos为开发人员提供了一个能涵盖大范围内各种嵌入式产品的公共软件基础结构,使得嵌入式软件开发人员可以集中精力去开发更好的嵌入式产品,而不是停留在对实时操作系统的开发、维护和配置上。

eCos在嵌入式系统软件方面最具创新意义的贡献是可配置组件框架。eCos可配置组件框架使得开发人员可选择那些能满足需求的组件,同时对其中一些组件进行配置,从而满足实现特定应用的需求,这意味着对于eCos中的一个组件来说,可以使用或者禁止它的某个特性,或者为它选择一种特定实现。一个例子是关于eCos调度器组件的配置,它为开发人员提供了一些配置选项,如线程优先级的数目、是否使用时间片等。通过对这些选项进行配置,与开发人员需求无关的任何代码都可从最后的映像文件中被去掉。

eCos的这种可配置性使得公司能够在内部建立起一个可重用的组件库,库中的每个组件都包含其实现的源代码。由于这些组件具有较好的可移植性和广泛的可适用性,因此通过使用它们,公司就能大大地缩短产品的开发时间和上市时间。eCos的组件框架还鼓励通过第三方的开发来扩展核心组件的功能和特性。随着越来越多的开发人员在开发的产品中不断地扩展组件的功能,并且把这样的组件贡献给eCos项目,eCos的功能就会不断地完善和提高。另外,如果是eCos中还没有提供的功能,有了eCos的源代码,我们自己也可以实现它。

eCos能满足嵌入式Linux难以满足的对嵌入空间的需求,Linux内核最小约500KB,占用1.5MB内存,而eCos只占用几十到几百KB。eCos使用了多任务抢占机制,具有最小的中断延时,支持嵌入式所需的所有同步原语,并拥有灵活的调度策略和中断处理机制。eCos所提供的支持还包括开发嵌入式应用所需的所有工具,如eCos配置工具、基于GNU的编译器、汇编器、连接器、调试器和模拟器。eCos核心组件包括硬件抽象层(HAL)、内核、标准C和数学库、I/O控制系统、文件系统、网络协议栈、图形系统、GDB调试支持等。

起源与历史

eCos最初起源于Cygnus公司。Cygnus创建于1989年,创始人为Michael Tiemanm、David Henkel-Wallace和John Gilmore,其目的是为开源软件提供高质量的开发和支持。经过几年的艰苦努力,最后推出了今天被人们广泛使用的GNUPro开发工具包,包括GCC(ANSI-C编译器)、G++(C++编译器)、GDB(源码级和汇编级调试工具)、GAS(GNU汇编器)、LD(GNU链接器)、Cygwin(Windows下的UNIX环境)、Insight(GDB图形界面GUI)等。

Cygnus对eCos的设计始于1997年春季,其主要目的是为市场提供一种低成本、高效率、高质量的嵌入式软件解决方案,同时要求该软件所占系统资源极少。eCos和GNUPro相辅相成,扩大了Cygnus的产品线。eCos从设计之初就考虑到了嵌入式系统中的内存资源的限制以及嵌入式硬件平台的多样性。通过与其他许多半导体公司的协作,Cygnus成功构造了一个可以对硬件层进行抽象的实时操作系统(RTOS),并且具有高度可配置性。这些特性使得RTOS可以适合于各种各样的嵌入式系统,这种RTOS就是eCos。eCos的高度可配置性可以显著缩短嵌入式产品的开发周期。

Cygnus对eCos的另一个设计目标是降低嵌入式产品的成本。低成本是嵌入式系统开发中必须考虑的一个重要因素。通过使用开放源代码的形式,eCos基本上不需要任何费用。它是一种完全免费的软件,任何公司和个人都可以直接从互联网下载其源代码和相应的开发工具,并且可以自由地进行修改和扩展,eCos产品的发布也无需交纳任何版权费用。用户可以自由使用eCos,但是要求公布对eCos的改动,这是为了提高或促进eCos发展的一种措施。当然,用户的应用程序不必公开。

  • 1989年,Cygnus创建。
  • 1998年11月,Cygnus发布第一个eCos版本(eCos 1.1)。
  • 1999年5月,发布eCos 1.2.1。
  • 1999年11月,RedHat以6.7亿美元收购Cygnus。
  • 2000年3月,RedHat发布eCos 1.3.1。
  • 2000年8月,增加RedBoot支持。
  • 2002年,RedHat裁减eCos开发团队,原eCos团队组建eCosCentric公司。
  • 2003年5月,eCosCentric发布eCos 2.0。
  • 2004年1月,RedHat宣布将eCos版权转移给自由软件基金会(Free Software Foundation)。
  • 2008年11月,增加Cortex-M架构支持。
  • 2009年3月,eCosCentric发布eCos 3.0。
  • 2013年8月,增加单精度浮点数学库以支持Cortex-M4F的硬件浮点处理器。

开发环境

eCos使用Windows或者Linux作为开发宿主机,使用Windows作宿主机时需要安装Cygwin,Cygwin为eCos开发工具提供一个UNIX模拟环境,使得UNIX下的开发工具可以运行在Windows系统上。eCos使用GNU工具链作为编译调试工具,使用GCC作为编译器,使用GDB作为调试器,与eCos一样,GNU工具链也是开源免版税的,可以从互联网免费下载。使用Eclipse作为GDB的前端,为GDB增加图形化调试支持,也可以使用Eclipse编辑浏览eCos或应用程序代码,Eclipse同样也是开源免版税的,Eclipse最早由IBM开发,后来IBM将Eclipse代码捐赠给社区并成立了Eclipse基金会。使用Eclipse作为eCos开发环境的更多内容请参考这里

eCos不支持除了GCC之外的其他编译器,eCos的实现利用了很多GCC专有的特性,修改eCos以支持其他编译器的工作量非常大,而且如果编译器没有提供为C++静态对象初始化排序的特性,将无法正确编译eCos。

可以使用除GDB之外的调试软件对eCos进行调试,但使用其他调试器可能不能获得线程信息。

可以使用仿真器调试eCos,需要使用额外的软件来获取线程信息。

获取eCos及工具

eCos使用CVS和Mercurial作为版本控制系统,因此首先必须安装CVS或Mercurial,二者选择其一即可,推荐使用Mercurial。Windows下可以使用TortoiseCVS或者TortoiseHg(Mercurial简称Hg)。

使用Mercurial获取eCos代码

第一次获取代码时,使用hg的clone命令克隆一份eCos代码,后续更新eCos代码使用hg的pull命令和hg的update命令。这里(eCosCentric)和这里(eCos技术网)有更具体说明。

hg clone http://hg-pub.ecoscentric.com/ecos/
hg pull
hg update

使用CVS获取eCos代码

第一次获取代码时,使用cvs的checkout命令签出最新版代码,后续更新eCos代码使用svn的update命令。这里(eCos官方)和这里(eCos技术网)有更具体说明。

cvs -z3 -d :pserver:anoncvs@ecos.sourceware.org:/cvs/ecos co -P ecos
cvs -z3 update -d -P

获取配置工具

最新版eCos配置工具可以点击这里下载,截止2013年11月2日,适用于Windows系统的最新版配置工具是ecos-tools-bin-120425.cygwin.tar.bz2,Windows版需要Cygwin支持,Cygwin可以通过Cygwin官网下载安装;适用于Linux系统的最新版配置工具是ecos-tools-bin-110209.i386linux.tar.bz2

获取交叉编译器

eCos作为嵌入式软件通常使用交叉编译器进行编译,eCos官方提供了多种硬件平台的交叉编译器,根据自身需求下载相应硬件平台的版本,Windows版可以点击这里下载,Linux版可以点击这里下载。也可以下载第三方提供的交叉编译器,例如GNU Tools for ARM Embedded ProcessorsSourcery CodeBench Lite Edition,但第三方提供的交叉编译器通常只支持Linux和原生Windows,不支持Cygwin,如果需要在Windows下使用第三方交叉编译器,需要对eCos配置工具生成的Makefile作处理,将Cygwin路径转换成Windows路径。

配置工具

eCos配置工具包括命令行配置工具和图形化配置工具,提供系统配置编辑保存、组件安装卸载、模板选择、自动化单元测试等功能。

图形化配置工具

双击configtool打开图形化配置工具,图形化配置工具界面窗口除了标准的菜单栏、工具栏和状态栏外,可以分为五个部分:配置窗口、属性窗口、描述窗口、冲突窗口及输出窗口。

  • 配置窗口是左边占据位置最大的窗口。其中的各个树状目录表示的是当前配置所包含的组件包以及选项。
  • 属性窗口描述相应条目的各种属性,包括当前值、默认值、编译目标等。
  • 冲突窗口用来描述选择不同的配置项目时,是否会有中间的依赖关系或其他方面的属性发生了冲突。
  • 描述窗口是对相关配置条目的简单描述,包括功能、目标及其注意内容等。
  • 输出窗口用来观察配置过程中实时输出的一些信息,例如编译过程是否发生编译错误等。

技术图片

模板选择

通过配置工具的Build >> Templates... 打开模板选择对话框,选择硬件模板(目标机)和组件包模板,模板的作用是为用户的开发工作提供一个适当的起点。

技术图片

添加删除组件

通过配置工具的Build >> Packages... 打开组件对话框,根据应用需求添加组件到当前配置,或者从当前配置中删除组件。

技术图片

冲突解决

eCos配置工具包含了一个推理机,该推理机能够自动检测到当前配置中所存在的冲突,并能指出解决这些冲突的方法。冲突解决对话框将在配置出现冲突的情况下弹出,或者通过配置工具菜单Tools >>  Resolve Conflicts手动打开冲突解决对话框。

技术图片

自动化单元测试

eCos配置工具还提供自动化单元测试功能,通过调试器与目标机建立连接,使用调试接口下载测试程序并通过调试接口接收测试程序的测试报告,单元测试工具可以自动解析测试报告,并给出测试报表。使用配置工具可以对目标机硬件或者eCos系统进行自动化测试,为eCos的稳定可靠运行提供了保障。几乎每个eCos组件包都包含了足够的测试程序对该组件进行测试。通过配置工具菜单Build >> Tests编译测试程序,通过菜单Tools >> Run Tests...打开单元测试对话框。

技术图片

 组件包管理

通过配置工具菜单Tools >> Administration...打开包管理对话框,在这里可以安装第三方提供的eCos组件包,也可以从当前组件仓库中卸载组件包。

技术图片

核心组件

eCos核心组件包括硬件抽象层、内核、I/O控制系统、标准C和数学库、文件系统、网络协议栈、图形系统等。eCos支持通过安装第三方组件进行扩展。

技术图片

硬件抽象层(HAL)

HAL屏蔽了eCos系统中依赖与体系结构的相关特性,它向上层提供了一个统一的接口,使得其他组件具有很好的可移植性。基本上来讲,HAL就是一个软件层,它具有统一的API接口,封装了用于实现所需功能的特定硬件操作。

HAL在架构时采用了通用的设计原则。首先整个HAL是用C语言和汇编语言实现的,因此适用范围很广。其次,HAL的接口都是用C语言的宏定义实现的,对每个接口可采用执行效率最高的实现方式,而接口自身不会受到任何影响。接口的实现方式包括内联汇编代码、内联C代码、C或汇编的外部函数调用。通过采取内联的实现方式,能大大减少系统在运行时函数调用的开销,但同时代码的体积也相应地变大了。最后,HAL在设计时也强调要尽量简化平台的移植,因为移植HAL经常是开发人员需要做的工作。

HAL分成3个独立的子模块,体系结构HAL、变体HAL、平台HAL。HAL的第1个子模块是体系结构HAL,eCos支持的每种处理器系列都被看作是一种不同的体系结构。体系结构HAL模块中的代码包括CPU启动、中断提交、上下文切换以及其他一些与某处理器系列的指令集体系结构相关的特定功能。第2个子模块是变体HAL,它对应体系结构HAL描述的处理器系列中一种特定的处理器。变体HAL用来对处理器的一些像片内设备这样的特性提供支持,如MMU。第3个子模块是平台HAL,它对应于一系列的硬件,其中包括选择的处理器或处理器变体,通常模块中的代码包括平台的启动、芯片选择和配置、中断控制和时钟设备的驱动。

与其他RTOS相比:大部分RTOS不提供硬件抽象层,需要应用程序自行实现。eCos硬件抽象层的分层设计简化了系统移植过程,多数情况下只需要编写平台HAL。

内核(Kernel)

内核是eCos系统的核心。内核提供了一个实时操作系统所期望的标准功能,如中断和异常处理、调度、线程和同步等。在eCos系统中,这些构成内核的标准功能组件是完全可配置的,以满足特定的需求。eCos内核用C++语言实现,从而使得以C++语言实现的应用程序直接与内核进行接口。然后,没有提供官方的C++ API。

有一个配置选项使得可以使用C语言内核API,这些内核API函数在文件kapi.h中定义。eCos内核还支持与标准的POSIX兼容层进行接口,这意味着应用程序可以使用标准POSIX接口进行编程。

与其他RTOS相比:eCos有两种调度器可选,可以使用C++对象与内核进行接口,可以使用标准POSIX接口创建管理线程和同步对象以便在Linux和eCos之间进行移植。

I/O控制系统

eCos的I/O控制系统由两个模块组成:I/O子系统和设备驱动程序。I/O控制系统设计中使用分层的方法,这使得每个模块提供了基本的及与设备相关的I/O功能,并将这些功能提供给更高级别的软件组件。在某些情况下,组件可以相互基于对方的上层来扩展特定设备的功能。

I/O子系统提供了一个标准的API来访问底层的硬件设备。I/O子系统函数使用句柄来访问设备驱动程序。I/O子系统API包括:cyg_io_lookup、cyg_io_write、cyg_io_read、cyg_io_get_config、cyg_io_set_config。

设备驱动程序是控制特定硬件组件的一段代码。通过删除了任何不需要的复杂层,将eCos设备驱动程序的设计重点着眼与效率。隔离和封装组件相关的实现是设备驱动程序的工作,这就使得I/O子系统向使用设备I/O表为更高级别的软件模块提供了标准接口。

与其他RTOS相比:大部分RTOS不提供I/O子系统和驱动程序,需要应用程序自行实现。eCos提供的I/O子系统统一了设备驱动接口,简化了应用程序对硬件资源的访问接口。

标准C和数学库

eCos提供的C和数学库与国际标准规范相兼容。eCos将标准C库依据功能划分成多个组件包,应用程序可以根据需要加载一个或多个C库组件包。eCos标准C库和数学库提供线程安全支持,可以通过选项选择是否需要包含线程安全特性,默认支持线程安全特性。eCos标准C库的底层实现通过HAL完成,应用程序可以直接使用C库中的标准输入输出函数,标准输入输出使用HAL提供的诊断控制台实现。

与其他RTOS相比:eCos的C库是操作系统自带的,已经实现了线程安全和IO底层函数,应用程序无需做任何额外工作就可以使用C库标准输入输出函数,如printf。其他RTOS的C库通常由编译器提供,通常是线程不安全的,访问部分不可重入函数时应用程序需要自行处理线程安全问题,此外编译器提供的C库没有实现IO底层函数,需要应用程序实现IO底层函数才能正常使用标准IO输入输出函数。

POSIX兼容层

eCos提供了POSIX兼容层,应用程序可以使用标准POSIX环境和API进行编程。POSIX是UNIX系统及类UNIX系统的API标准,Linux系统就提供标准POSIX环境和API。Linux应用程序就是使用POSIX环境和API进行编程的,有了POSIX兼容层,一方面可以非常容易的将Linux应用程序移植到eCos,另一方面如果eCos不能满足需求那么可以将应用程序移植到Linux使用嵌入式Linux系统。POSIX兼容层包括线程管理、同步信号、文件系统、BSD Socket等。

与其他RTOS相比:标准化是减少人工成本的必然趋势,多数RTOS都提供了POSIX兼容层,包括开源的RTEMS和商业的VxWorks等都提供POSIX兼容层,因此使用POSIX接口编写应用程序,不仅可以在eCos和Linux之间相互移植,也可以在eCos和其他RTOS之间相互移植。

文件系统

eCos文件系统采用标准POSIX文件操作接口mount、umount、open、close、read、write,支持多种类型文件系统并存,支持同一文件系统的多个分区,支持的文件系统包括ROM文件系统、RAM文件系统、JFFS2文件系统和FAT文件系统,其中FAT文件系统兼容FAT12、FAT16和FAT32文件系统。通过安装第三方扩展组件,还可以支持YAFFS文件系统。

与其他RTOS相比:eCos提供的以及可免费获取的第三方文件系统组件(YAFFS)已经基本覆盖了嵌入式系统软件可能用到的文件系统。在使用上,eCos文件系统与Linux完全相同,如果熟悉Linux文件系统,可以非常快速地掌握eCos文件系统。

网络协议栈

eCos提供了3个网络协议栈实现,应用程序可以选择不同组件包来选择不同的协议栈。第1个网络协议栈实现来源于OpenBSD网络代码,支持下列协议:IPv4、ARP、RARP、ICMP、UDP、TCP、DHCP、BOOTP、TFTP。第2个网络协议栈实现来源与KAME项目发布的FreeBSD网络代码,支持下列协议:IPv4、IPv6、ARP、RARP、ICMP、IGMP、UDP、TCP、DHCP、BOOTP、TFTP,此外还支持广播寻址和广播路由。第3个网络协议栈为lwIP,lwIP利用很小的存储空间来实现TCP/IP协议栈。lwIP的关键就是其提供了全面TCP/IP支持,而使用很少的存储空间,此外lwIP包含非常多的可配置项,可以对协议栈进行深度配置裁剪,非常适合嵌入式系统使用。lwIP支持下列协议:IPv4、IPv6、ARP、ICMP、UDP、TCP、DHCP、BOOTP。

与其他RTOS相比:其他RTOS通常仅提供lwIP支持,lwIP适用于嵌入式系统,但是部分功能不完善,而eCos不仅提供了lwIP还提供全功能的BSD协议栈。

图形系统

eCos提供了一个MicroWindows(现已更名为Nano-X)组件包作为可选的图形系统。Nano-X是一个著名的开发源代码的嵌入式GUI软件,其最初的设计目的是把现代图形视窗环境引入到运行Linux的小型设备和平台上。作为X Window的替代品,Nano-X可以使用更少的RAM和文件存储空间(100K-600K)提供与X Window相似功能。

Nano-X具有很好的可移植性,设计者可以轻松加入各种显示设备、鼠标、触摸屏和键盘等。目前Nano-X已不局限与Linux平台,已广泛应用各种嵌入式设备上。开发人员只需要提供适当的现实设备驱动便可以轻松地在eCos下运行Nano-X图形界面。

与其他RTOS相比:大部分RTOS不提供图形系统,需要应用程序自行解决。

可配置实现方法

对软件代码进行配置的的方法包括运行时、链接时和编译时。

运行时配置

控制软件组件的一种方法是在软件运行时,这种方法将应用所使用到的所有代码分割成多个部分并分别编译成共享库,当应用需要某部分代码时就加载该部分代码所在的共享库。这种方法没有预先对组件进行任何配置,无论需要与否,都需要编译所有组件代码,并在应用发布时包含全部共享库文件,这样就导致应用程序代码和映像的体积非常大。运行时控制方法的一个例子就是桌面系统中执行的应用程序,当应用程序从磁盘中调入内存开始执行时,它所依赖的共享库(动态链接库DLL)也被加载到内存中。

链接时配置

另外一种控制组件的方法是在程序链接时,许多链接器如GNU链接器(LD),都是采用链接时的控制方法,或是通常所说的选择性链接(Selective Linking)。通过这种选择性的链接方法,未被引用到的函数和数据将被从应用的映像中去除掉。但是这种方法也有不足,因为对于一个函数来说,或者是被链接到应用中去,或者是整个从应用中被去除。

编译时配置

编译时的代码控制方法能在最早的时候对组件的行为进行控制,开发人员可根据应用的特定需求来定制组件。从生成的软件代码体积的大小来看,编译时控制方法的效果是最好的,因为它可在语句级上对组件中的代码进行控制,而不是函数级或对象级。因此这样看来,编译时的代码控制方法是最适合与嵌入式系统开发的。

eCos配置实现方法

eCos就是使用编译时控制方法和GNU链接器提供的选择性链接方法一起来实现对组件行为的控制的。编译时控制方法或源码级的配置方法是通过C语言的预处理器实现的。源码级的配置方法的例子见下文代码清单所示,宏CYGOPT_PACKAGE_OPTION_NAME是由开发人员来决定是否定义,在编译时,仅仅是需要的代码被包含到应用的映像中。

  1. #ifdef CYGOPT_PACKAGE_OPTION_NAME
  2. ......
  3. #else
  4. ......
  5. #endif

通过采用源码级的配置方法,就可根据需要在程序代码中定义特定的配置选项,这非常适用与嵌入式系统,因为大多数嵌入式应用都是被编译成一个静态的映像。在嵌入式软件的开发过程中,源码级的配置方法不仅能产生更加精简的代码而且代码响应速度更快实时性更强。

在发布的eCos中提供了一个配置工具,它可帮助我们简化组件的选择和配置,这个工具还可选择软件组件来创建eCos框架,然后和应用链接到一起。这个配置工具既可以运行在Windows平台,也可以运行在Linux平台。

可配置体系结构

eCos被设计成一个由几个主要的软件组件(如内核和HAL)组成的可配置的体系结构。这样做的基本目的就是能利用这些可重用的软件组件来开发完整的嵌入式系统;同时,这也使得用户可根据应用的特定需求来设置组件中每个配置选项,或者完全去掉一些不相关的组件。这样,就可创建一个最适合系统应用需求的eCos映像,软件中只包含需要的组件,因此大小是最精简的。实际上,有些实时操作系统并没有提供这样的配置功能,不管实际应用是否需要,开发的软件几乎包含了操作系统中的所有功能;与此不同的是,基于eCos开发的软件运行速度非常快,因为不需要执行那些与应用无关的额外代码。

可配置性是eCos的一个主要特性,因此在eCos中也提供了相应的工具来管理组件中众多复杂的配置选项;也可根据需要利用这个工具来添加或删除组件,最后再用它把eCos库中的组件和应用程序链接到一起得到最终的产品。

组件框架

组件框架(Component Framework)是用于对目标机进行配置以及对组件仓库进行管理的一组工具。包括ecosconfig命令行配置工具、configtool图形配置工具、ecosadmin.tcl组件包管理工具。命令行配置工具和图形配置工具都建立在一个用于对组件进行描述的CDL库的基础之上。

配置选项

配置选项(Configuration Options)是进行配置的基本单位。每一个选项都对应与用户的一个选择。例如,内核有一个选项用于设置系统调度优先级数目。选项可以对一个代码很小的函数进行控制,例如选择是否内嵌C库函数strtok。也可以对一些代码相当大的函数进行控制,例如对printf是否支持浮点转换的选择。

组件

组件(Component)是一个功能单位,如一个特殊的内核调度器、一个指定设备的设备驱动程序等。组件也是一个配置选项,用户可以对组件的所有功能的使能和禁止进行选项。例如,如果目标系统中的某个设备在实际应用中不被使用,就不需要该设备的驱动程序。禁止该设备的驱动程序可以降低程序代码和数据对内存的需求。

包(Packages)是一种特殊类型的组件,它是组件的发布单位。对于一个包含了所有源代码、头文件、说明文档和其他一些相关文件的包,可以形成一个发布文件。使用适当的管理工具可以对该发布文件进行安装,也可以卸载包,或更新包的版本。eCos源码已经提供了许多包,如内核和基础结构包等。其他第三方软件包可以通过不同途径获得,并且可以与eCos安装在一起。

组件仓库

eCos具有一个组件仓库(Component Repository),它是一个目录结构,所有的包都被安装在这里,组件框架提供了一个组件管理工具用于对包进行安装和删除等操作。组件仓库包含一个简单的数据库,该数据库包含了每个包的详细信息,由管理工具进行维护。

配置

配置(Configuration)是用户所做选择的一个集合。组件框架的各种工具负责对整个配置进行处理,使用这些工具可以产生新的配置并保存配置(默认为ecos.ecc)。还可以对配置进行操作,在编译eCos和其他组件包之前使用配置来产生一个编译树。配置包含了哪些包被选择以及这些包中的哪些选项被用户使能或禁止等详细信息。

目标机

目标机(Target)是指将要运行eCos应用程序的硬件平台。它可以是真实的硬件平台,也可以是一个模拟器。在创建一个新的配置的时候,需要指定相应的目标机。组件框架将根据指定的目标机选择一组包来产生相应的配置,如硬件抽象层HAL和设备驱动程序等。此外,它还有可能根据指定目标机的具体特点来对某些选项进行设置。

模板

模板(Template)是一种局部性配置,其目的是为用户的开发工作提供一个适当的起点。eCos源码中提供了一些模板。其中有一个只提供很小功能的模板(minimal),它仅仅进行硬件初始化然后直接跳转到应用程序。默认模板(default)在此基础上增加了其他一些功能,例如内核和C库等。创建一个新的配置时,通常要指定模板和目标机,应用程序在这种配置下进行编译和链接,并最终在目标机上运行。

属性

对于每一个配置选项,组件框架都需要了解它的一些相关信息。例如,它需要知道什么样的选项值是合法的、选项的默认值是什么、当用户需要对其进行选择时相应的联机说明文档位置在哪里等。每一个选择(包括组件和包)都由选项名字和选择的一组属性(Properties)组成。

约束条件

配置选项的选择并不是独立的,一个配置可能会受到其他配置选项的限制,并可能影响到其他的配置选项。例如,只有在内核对线程本地存储提供支持的条件下,C库才会提供一些像rand这样的具有线程安全性的函数。这就存在一个约束条件(Constraints):C库选项对内核有要求。

另外一种类型的约束条件涉及到选项的具体值。例如,一个调度优先级数目相关的内核选项就存在这样一个合法值的约束条件:调度优先级数目为0或负数是非法的。

冲突

用户对配置选项进行操作时可能会出现非法配置,可能有一个或多个约束条件得不到满足。例如,如内核中的“per-thread data”选项被禁止,而C库中的“thread-safety”选项仍然是使能的,这样就存在一个没有被满足的约束条件,这就是冲突(Conflicts)。配置工具将会报告这样的冲突。冲突的出现并不妨碍eCos的编译,但其结果难以预料,有可能在编译时报错,也有可能在链接时报错,或者应用程序根本就不能运行,或者应用程序虽然能运行但某些时候将会出现错误。在进行eCos配置的时候,如果配置工具报告有冲突发生,在继续进行配置之前通常要先解决这些冲突。

为了让用户操作更容易,配置工具提供了一个推理机。该推理机能够自动检测到当前配置中所存在的冲突,并能指出解决这些冲突的方法。推理机既可以自动解决这些冲突,也可以在人工干预下进行解决。

组件定义语言

配置工具需要由每个包提供各种选项信息,如结果信息、约束条件、在线说明文档位置等。这些信息是以CDL(组件定义语言,Component Definition Language)脚本的形式提供的。CDL主要用于对配置选项进行描述。

国内社区

eCos技术网是一个专注于eCos技术的社区网站,致力于开源免费的专为嵌入式系统设计的嵌入式可配置操作系统eCos在中国的应用、推广、社区服务和相应的产品技术方案。

参考资料

嵌入式可配置实时操作系统eCos(转)

标签:dde   并且   内容   功能   row   通用   linux   对组   资源   

原文地址:https://www.cnblogs.com/mangorange/p/14166811.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!