>
首页 » 业界动态 » eCos2.0体系结构的分析

eCos2.0体系结构的分析

作者:  时间:2007-05-15 21:36  来源:www.edires.net

eCos 是用一层 HAL (Hardware Abstraction Layer) 管理与硬件相关的所有API,它屏蔽了所有底层的cpu架构和平台的特定信息,一切的 I/OKernel 等等需要的信息都通过这层提供的所有 API与硬件交互,所以我们可以放心的进行跨平台的移植。
ecos2.0
的版本中内核实现了优先级的占先式调度和轮转调度相结合的MLQ调度器、基于优先级占先式调度的bitmap位图调度器和Lottery抽签调度器三种,eCos Kernel 主要的工作就是 调度,解决多个线程的对于cpu资源的占有需要,满足所有实时任务的时间要求。由于ecos是一个多线程的实时系统因此 调度显得格外的重要,它目前所采用的实时调度算法是 Multi-level QueueBitmap、和 Lottery算法。

嵌入式系统中,线程之间需要共享数据空间,但是一定要保证线程在访问资源的时候是互斥的。Ecos中实现了大多数嵌入式实时操作系统使用的定时和同步元件:semaphoreflagmutexmessage boxcounteralarmclocktimer等。
另外 Kernel 还提供异常和中断的处理,ecos中对于异常的处理可以有多种选择,既可以由应用程序直接处理,也可以由硬件抽象层和内核层直接进行相关的处理。

eCos 是由各个 Package 组成的,每个 Package 中又有许多的 Component 每个 Component 各有许多可以设定的选项。eCos 是使用 CDL (Component Description Language) 来描述 Component的。

cyg_start 是软件的进入点,它会呼叫 cyg_prestart()cyg_package_start()cyg_user_start() 之后,开始调度。因此通常我们会把我们的 thread 代码放在 cyg_user_start 中以完成工作。如果你定义了c库支持我们还可以实现程序从main函数中开始执行!

以下是以 eCos package 中节录列出的目录信息,分别简介其内容如下:

.

|-- compat

| `-- uitronlinuxposix

|-- cygmon

|-- devs

|-- ecos.db

|-- ecosadmin.tcl

|-- error

|-- hal

| |-- common

| |-- i386

| | |-- arch

| | |-- linux

| | `-- pc

| |-- mips

| |-- powerpc

|-- infra

|-- i o

| |-- common

| |-- pci

| `-- serial

|-- kernel

| `-- v2.0

| |-- cdl

| | |-- counters.cdl

| | |-- instrument.cdl

| | |-- interrupts.cdl

| | |-- kernel.cdl

| | |-- scheduler.cdl

| | |-- synch.cdl

| | `-- thread.cdl

| |-- include

| |-- src

| | |-- common

| | | |-- clock.cxx

| | | |-- except.cxx

| | | |-- kapi.cxx

| | | |-- thread.cxx

| | | `-- timer.cxx

| | |-- debug

| | | |-- dbg-thread-demux.c

| | | `-- dbg_gdb.cxx

| | |-- intr

| | | `-- intr.cxx

| | |-- mem

| | | |-- memfixed.cxx

| | | `-- memvar.cxx

| | |-- sched

| | | |-- bitmap.cxx

| | | |-- lottery.cxx

| | | |-- mlqueue.cxx

| | | `-- sched.cxx

| | `-- sync

| | |-- bin_sem.cxx

| | |-- cnt_sem.cxx

| | |-- cnt_sem2.cxx

| | |-- flag.cxx

| | |-- mbox.cxx

| | `-- mutex.cxx

| `-- tests

|-- language

| `-- c

| |-- libc

| | |-- src

| | | |-- ctype

| | | | |-- isalnum.cxx

| | | |-- errno

| | | | `-- errno.cxx

| | | |-- stdio

| | | | |-- common

| | | | | |-- stdin.cxx

| | | | |-- input

| | | | | |-- scanf.cxx

| | | | `-- output

| | | | |-- printf.cxx

| | | |-- stdlib

| | | | |-- rand.cxx

| | | |-- string

| | | | |-- strcat.cxx

| | | |-- support

| | | | |-- main.cxx

| | | `-- time

| | | |-- time.cxx

| | `-- tests

| `-- libm

|-- pkgconf

| `-- rules.mak

`-- templates

|-- all

| |-- ChangeLog

| `-- v2.0.ect

|-- cygmon

| |-- ChangeLog

| `-- v2.0.ect

|-- default

| |-- ChangeLog

| `-- v2.0.ect

|-- kernel

| |-- ChangeLog

| `-- v2.0.ect

|-- minimal

| |-- ChangeLog

| `-- v2.0.ect

|-- stubs

| |-- ChangeLog

| `-- v2.0.ect

`-- uitron

|-- ChangeLog

`-- v2.0.ect

compat

compat 目录中存有 eCos kernel 所支持的 compatible APIs',目前最重要的就是所谓的 uitron APIuitron API 定义了一套弹性的操作系统架构,特别是针对 embedded system

它对主要的处理器架构充份的支持,并避免了在 API 层次上过度抽象化对实时系统的不良影响。这层 API 可以用硬件来完成,因此也避免了软件安装至新架构时所需花费的功夫。

cygmon

cygmon 调试监视器cygmon的包,目前其已经被redboot rom监视器所代替。

devs

设备驱动程序组件的包,里头是 System Device 的程序,例如串口、网卡等。

ecos.db, ecosadmin.tcl

ecos.db 存有 Kernel 已经安装的 Package 信息。要安装一个新的 package Kernel 中,则可以使用 ecosadmin.tcl

error

error 目录中的档案定义了 eCos 系统的所有 error message 以及一些 error handling routine。公共的错误和状态码包。

hal, hal/common,

hal 目录即是 Hardware Abstraction Layer 的程序。HAL eCos 跨平台的重要机制。

hal/common 即是跨平台所需的基本 API 定义之处,而在不同的架构目录下,有不同的 implementation。例如 hal/arm就是对 arm架构的支持( hal/arm/arch),还有 mips, powerpc 等等许多目录。

infra

infra 提供了 Trace, Debug、和 Assert Information 的程序代码。

Io

独立于硬件设备的公共i/o系统支持包,是设备驱动程序的基础。

kernel

v2.0 kernel 包含核心功能的包,调度器、信号量、线程等,我们可以先从它的目录结构来看看:

kernel/cdl

CDL Component Description Language,其实在之前的每个目录中几乎也都有。

Package 设定与安装都透过这个目录中的 cdl 文件来达成对 src 的设定。

kernel/include

include 目录也是在之前的每个目录中几乎都有。主要是给 src 中的档案必要的 prototyping 以及configurable 的常数设定。

kernel/src/common

timer.cxx, clock.cxx:所有的 alarm, counter, clock, timer 的支持

except.cxx:例外处理

kapi.cxx:对 Native C API 的支援

thread.cxx:对 thread 的支援

kernel/src/debug

kernel debugging information,特别有给 gdb

kernel/src/intr

kernel interrupt routine

kernel/src/mem

内存管理

kernel/src/sched

调度程序,目前提供有 multi-level queue(mlqueue.cxx)bitmap(bitmap.cxx) lottery(lottery.cxx)三种算法。

kernel/src/sync

提供 thread 之间的同步及沟通必要的档案。包括 semaphore, mutex, message box flag

kernel/tests

在很多目录中都有 test 的档案,当 make test 时会产生一些测试的执行档看看该架构上某些功能有没有用。

language

iso c库和数学库,应用中可以使用c库和浮点数学库。language 目录提供对各种 language API 的支持,但目前只有 c language,又分 libc libm 两大种。

language/c/libc

Standard C API,如定义在 ctype.h 中的 isalnumstdio 中的 scanf/printf 等等。

这些重新写过的 Code 会在 Linux synthesis mode 中被 Link 进入执行档中,而不会 Link 原来的 C Library。因此这些 Code 也是 eCos 的一部份。

language/c/libm

c math library,主要是对浮点数的支持。

pkgconf

这是 package 设定的 rule 所放的地方

templates

记录不同的 template 所用到的 packages,如 all(全部)minimum(最小,不含 Kernel API 的支持)

Redboot

调试用的Redboot监视器

Net

网络支持包

Isoinfra

实现了iso c库和posix的包。

Service 包含内存动态分配、压缩、解压缩的支持库!

相关推荐

Ctrack选用u-blox GPS和蜂巢式模组开发车队管理解决方案

u-blox  嵌入式  Ctrack  2014-05-21

动作撷取追踪的嵌入式体感控制新技术

嵌入式  体感控制  2013-12-06

嵌入式系统的固件更新

嵌入式  Flash  RAM  缓冲区  2013-09-12

汽车电子向一体化集成、网络化与智能化发展

汽车电子  嵌入式  2013-05-23

东芝开发嵌入式SRAM低功耗技术智能手机

东芝  嵌入式  SRAM  2013-02-23

飞思卡尔基于ARM平台全系列MCU引领嵌入式应用新趋势

飞思卡尔  ARM  嵌入式  2013-01-29
在线研讨会
焦点