ecos: Embedded Configurable operating System嵌入式可配置操作系统
运行时配置(runt ime)
链接时配置(link time)
编译时配置(compile time)
虚拟向量表:CYG_ADDRWORD hal_virtual_vector_table[CYGNUM_CALL_IF_TABLE_SIZE]
虚拟向量通信服务
typedef CYG_ADDRWORD hal_virtual_comm_table_t[CYGNUM_COMM_IF_TABLE_SIZE]
hal_virtual_comm_table_t comm_channels[CYGNUM_HAL_VIRTUAL_VECTOR_NUM_CHANNELS+1]
在系统初始化时,hal_if_init()初始化函数默认情况下将会吧set_debug_comm函数和set_Console_comm函数入口地址填充到虚拟向量表的12,13号向量对应的位置,他们根据不同的听狂来选择comm_channels数组中的某个信道来作为debug和console功能的提供者
ecos相关支撑资源分为2部分:
1.组件管理部分
2.组件(component):一系列组件资源的组合
|——包(Package)--每个配置包都包含一个CDL脚本
|——组件
|——子组件
|——选项
术语:配置(Configuration)——一组选项的集合。包括配置包的选择与否,组件的添加或删除、选项的打开或关闭等
目标(Target)——配置的系统所着眼于应用的硬件平台
模板(Template)——一组默认或特定的配置
属性(Property)——某个对象的特征。比如名称、当前值、默认值、显示内容等
效果(Consequence)——配置的结果主要是对产生的输出库有作用。一方面,配置可以决定在库的建立过程中所涉及的文件,另一方面配置会在头文件中产生一些宏定义,而配置包的源代码可以将相关的头文件包括进去,并进行相应的处理。
约束(Constraint)——配置选项之间的互相依赖关系
冲突(Conflict)
CDL:Component Descriptor Languange
组件库:可看做一个容器,容纳eCos的配置包。在组件库的根目录中有一个eCOs.db的文件用作组件库的数据库。保存已安装的配置包信息,包括配置包的安装位置,CDL脚本,别名等。另外还保存了不同目标(硬件体系结构)所需要的配置包信息情况。
激活(ACtive)与使能(Enable)
激活是指一个选项在图形化配置界面中是可操作的。而不是灰色的不可操作状态
配置生成过程
在配置生成过程中,设计目录有以下三个
1.组件库
2.Build树——保存配置生成过程中的一些临时文件或信息,主要包括目标文件等,当配置过程完成后这些文件就不再需要了
3.Install树——保存了配置开发人员需要的头文件、库等内容。Lib子目录中保存了链接脚本、起始代码等文件。Include子目录中保存了各个包输出的头文件,另外在它的pkgconf中还保存了由宏定义构成的头文件。
配置头文件的生成
两种配置头文件生成机制:
1)使能或禁止某一个选项。控制相关文件的建立,是否添加到库中
2)通过输出配置头文件,#define等C的宏定义来控制代码块
两类配置头文件:(都在install/inlcude/pkgconf目录中)
1)系统头文件,名称是system.h
2)另一类是配置包的头文件。
在CDL文件中,可以通过执行操作的头文件属性来选择操作的对象。
$::cdl_header——指定的输出对象是当前包的配置文件
$::cld_system_header——指定的输出对象是系统配置头文件
配置头文件内容的产生顺序:
1)system.h中,内容的产生顺序与target和template中的配置包出现顺序有关:
在配置文件中所使用的配置内容由target和template中的包的内容共同决定。首先考察target中的内容,按照其包的顺序产生相关的define语句。之后考察template的内容,同样按照其命令体系中的配置包出现顺序来决定要产生的define语句的顺序
2)生成配置包的相关头文件。其define语句的定义内容和配置包中的CDL描述脚本或其下层的描述脚本中的各个组件、选项或接口出现的顺序相关
配置头文件内容的产生过程:
1)配置头文件中的define语句只与激活的、并且使能的配置选项有关系。如果配置选项是非激活的或非使能的,则不会为其定义define语句
2)根据指定的格式或默认格式产生头文件。如果定一个了no_define属性,则会禁止默认输出格式的执行
3)如果指定了define属性,则按照其指定的内容、格式来输出。可以指定输出的符号和目标文件名
4)如果指定了if_define属性
cdl_option A{ ...... if_define xx yy ...... }
|
则产生如下代码:
#ifdef xx #define yy 1 #endif
|
5)处理define_proc指定的内容。通过该属性可以往头文件中输出任意指定的内容
define_proc { puts $::cdl_header "#define CYGBLD_HAL_VAR_INTS_H " puts $::cdl_system_header "#define CYGBLD_HAL_ARM_VAR_IO_H" puts $::cdl_header "#define CYGPRI_KERNEL_TESTS_DHRYSTONE_PASSES 1000000" }
|
相应的配置包头文件中
#define CYGBLD_HAL_VAR_INTS_H <cyg/hal/hal_var_ints.h> #define CYGPRI_KERNEL_TESTS_DHRYSTONE_PASSES 1000000
|
输出头文件的标示:
在配置包中,通过include_files属性可以定义要输出的头文件(也就是将配置包中的头文件复制到build树下)。默认情况下,这些文件的位置是在配置包的include目录下面,如果没有include目录,则会在配置包的根目录寻找相应的头文件。如果没有include_files属性,就将配置包中include目录下的所有头文件输出到build树下。如果不存在include目录,则会在配置包的根目录以及各级子目录中寻找,所有找到的头文件都会被输出。如果不需要要输出头文件,则include_files属性后面应该保持空白。
cdl_package CYGPKG_HAL_ARM_MX27ADS { ......
include_dir cyg/hal
include_files AA.inl define_header hal_arm_board.h --本配置包产生的头文件名
|
将这个CDL所属配置包中的include/AA.inl复制到install/include/cyg/hal目录下
编译过程
compile属性:编译过程中的编译源文件指定是通过compile属性
compile文件位置:默认是每个配置包下面的src目录。如果compile指定了文件的位置,其相对路径仍然是src目录。如果找不到指定的文件,则重新在src目录中寻找改文件,此时会去掉指定的相对路径
库:libtarget.a libextras.a
CDL脚本
cdl_package/cdl_component/cdl_option/cfl_interface {命令体}
cdl_interface,提供了一种抽象机制,通过抽象概念来表达约束,而不是特定的实现这。接口的值受其实现者的共同作用
CDL属性:
信息提供属性 display
description
doc
配置架构属性 parent:将配置条目定位到配置架构中的其他位置
script
配置头文件控制属性 define_header:如果没此属性,默认规则,1)将配置包名称字符串中第一个下划线之前的字字符全部去掉,如CYGPKG_KERNEL变为KERNEL 2)大写字符变为小写字母,如KERNEL变为kernel 3)在后面在后缀.h 如kernel变为kernel.h
define_format 控制选项值出现在配置头文件中的格式
define_proc
define
no_define
if_define
取值属性 flavor:指定配置选项的属性特征 none/data/bool/booldata
calculated:指定配置选项的值为复杂表达式,而不是用户直接指定的值
default_value:指定选项的默认值
legal_value:规定选项取值的范围
active_if 控制选项的激活状态依赖与某些指定的条件
implements:激活指定的接口
requires 用来指定一个选项激活并且使能时需要的条件
Build属性 compile
make
make_object
library
include_dir
include_files
杂项属性 hardware:指定配置包特定以某种类型的硬件
风格(flavor) |
使能(Enable) |
数据(Data) |
none |
总是使能 |
1 不可修改 |
bool |
用户可修改 |
1 不可修改 |
data |
总是使能 |
用户可修改 |
booldata |
用户可修改 |
用户可修改 |
Redboot启动模式: ROM
RAM
ROMRAM
阅读(2007) | 评论(0) | 转发(2) |