Chinaunix首页 | 论坛 | 博客
  • 博客访问: 110982
  • 博文数量: 17
  • 博客积分: 2288
  • 博客等级: 大尉
  • 技术积分: 410
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-20 09:04
文章分类

全部博文(17)

文章存档

2010年(8)

2008年(9)

分类:

2008-05-30 17:46:37

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) |
给主人留下些什么吧!~~