eCos, embedded configuratable os. 这个名字很好的说明了这个操作系统的特性,高度可 配置的嵌入式操作系统。他现在是非常流行的嵌入式操作系统,支持很多嵌入式平台(远远 不只是ARM平台),而且配置简单。他原先是由Cygnus开发,后来归于Red Hat旗下。
安装
你可以按照官方的方来安装eCos,使用脚本来完成整个下载和安装过程很方便,这个过程安 全但是不可靠。其实本质上需要的就是下载两个包,和一套安装方法。
解压后的目录可以放置在任意位置(例如/opt/redboot),然后在此目录下创建以下脚本— (记住设置系统环境变量ECOS_REPOSITORY)
export ECOS_DEST=/opt/redboot
export ECOS_REPOSITORY=$ECOS_DEST/ecos-2.0/packages/
export PATH=$PATH:$ECOS_DEST/gnutools/i386-elf/bin/:$ECOS_DEST/ecos-2.0/tools/bin
rm build -rf
mkdir build
cd build
ecosconfig new pc redboot
ecosconfig import ${ECOS_DEST}/ecos-2.0/packages/hal/i386/pc/v2_0/misc/redboot_FLOPPY.ecm
ecosconfig tree
make
这样就得到一个裸露的内核redboot.bin,可以制作一个启动软盘,来在虚拟机里测试它。
ecos术语
package
parcket关键字对应一组完成独立功能的代码包,他可以内嵌cdl脚本,来容纳更小的单位, 如cdl_option和cdl_component。 option和component是更小的代码元素,在解析之后将会成为C语言的宏。比如:
cdl_option CYGSEM_REDBOOT_DEFAULT_NO_BOOTP {
user_value 1
};
生成在.h文件,就是 CYGSEM_REDBOOT_DEFAULT_NO_BOOTP 1
target
target指定某种目标架构,关键字下将会定义很多的packet,来设置需要的组建和代码包。
target edb9302 {
alias { "Cirrus Logic EDB9302 evaluation board" ep9302 }
packages { CYGPKG_HAL_ARM
CYGPKG_HAL_ARM_ARM9
CYGPKG_HAL_ARM_ARM9_EP93XX
CYGPKG_DEVS_FLASH_STRATA
CYGPKG_DEVS_FLASH_EDB9301
CYGPKG_DEVS_ETH_ARM_EP93XX
}
description "
The EDB9302 target provides the packages needed to run eCos on the Cirrus Logic
EP9302 based development boards."
set_value CYGHWR_HAL_ARM_EDB93XX_VARIANT "EP9302"
}
此target旨在建立edb9302,他会包含packets中指明的packet,并且设置宏 CYGHWR_HAL_ARM_EDB93XX_VARIANT "EP9302"
template
template是指为某种目的build而建立的相应模板配置,比如选取一些包,配置一些选项等 等。在目录 ecos-2.0/package/templates 下面有一些模板的目录。
文件 ecos.db
ecos-2.0/packages/ecos.db是ecos的选项总表,是维系整个ecos代码的数据库。他定义了 全部的target和target所需要packets。ecosconfig将从中获取信息,构建ecos.ecc,从而 完成代码树的构建。
文件 ecos.ecc
由ecosconfig声称的目标代码的设置文件,他包括了生成目标代码所需的所有选项配置,包 括了template, option,component等等等等。ecos.ecc有可能包含有冲突的部分,你需要 解决这些冲突,然后ecosconfig tree 声称代码树。
解释刚才的redboot.sh脚本
ecosconfig new pc redboot
此命令来创建一个针对target pc的ecc脚本,他将选取redboot作为模板。根据模板和 ecos.db,ecosconfig会向ecos.ecc脚本放置所有可能的组建,选项和包集合。
ecosconfig import ${ECOS_DEST}/ecos-2.0/packages/hal/i386/pc/v2_0/misc/redboot_FLOPPY.ecm
引入ecm设置,表明我们选择的启动媒体是软盘,你也可以选择其他介质。
ecosconfig tree
根据ecos.ecc来生成代码集合,之后make,完成编译安装。
eCos架构
这是一个ecos的系统框图,框图重点突出了Hardware Abstraction Layer在eCos中的重要作 用。如果要领悟这些,还需要参看eCos代码。
这里重点表述了redboot模板的eCos系统架构,redboot相当于是一个bootloader,但是他的 作用远远不只是启动内核那么简单。除了提供网络功能,他还包括了硬件初始化,调试,文 件系统等等功用。是嵌入式中应用非常广泛的bootloader。
有空下次聊聊eCos的源代码架构。
http://en.wikipedia.org/wiki/ecos
http://ecos.sourceware.org/
http://www.ecoscentric.com/ecos/ecospro.shtml