现在的位置: 首页 > 综合 > 正文

eCos编译配置说明

2017年09月21日 ⁄ 综合 ⁄ 共 2793字 ⁄ 字号 评论关闭

 

前两篇实验讲了如何build一个redboot,从VMWARE启动。

这次,要解释一些相关配置的过程。

eCos最重要特点就算是可配置(Configurable )了。所以,现在我们就看看它是怎么配置的。

一、基本概念

1 package
在eCos里,每一组源码的集合成为package,一个package,由一些源代码文件构成,实现一个独立的功能。 还有比package更小的单位,如:component,option,因为它们是更小的单元,对应的已经不是完整的源文件, 而是通过 C语言的宏来选择对应的代码功能和参数。

比如,一个option:

cdl_option CYGSEM_REDBOOT_DEFAULT_NO_BOOTP {
     user_value 1
};

生成在.h文件,就是

#define CYGSEM_REDBOOT_DEFAULT_NO_BOOTP 1

然后代码里面

#ifdef CYGSEM_REDBOOT_DEFAULT_NO_BOOTP

…… 

#endif

2 ecos.db
ecos.db位于ecos-2.0/package目录下, 它包含两种元素:
一种是package,如:
package CYGPKG_DEVS_ETH_AMD_LANCEPCI {
 alias   { "AMD Lance PCI ethernet driver" lancepci_eth_driver }
 hardware
 directory devs/eth/amd/lancepci
 script  amd_lancepci_eth_drivers.cdl
 description     "Ethernet driver for AMD Lance PCI controller (vmWare)."
}

它指示了某一个package所在的路径,和配置文件cdl的名称。在ecos.db里索引了所有的package信息。

另一种是target,如:
target pc_vmWare {
        alias  { "i386 PC target (vmWare)" }
 packages        { CYGPKG_HAL_I386
                          CYGPKG_HAL_I386_GENERIC
                          CYGPKG_HAL_I386_PC
                          CYGPKG_HAL_I386_PCMB
     CYGPKG_IO_PCI
                          CYGPKG_IO_SERIAL_GENERIC_16X5X
                   CYGPKG_IO_SERIAL_I386_PC
     CYGPKG_DEVS_ETH_AMD_LANCEPCI
     CYGPKG_DEVS_ETH_I386_PC_LANCEPCI
                          CYGPKG_DEVICES_WALLCLOCK_DALLAS_DS12887
                          CYGPKG_DEVICES_WALLCLOCK_I386_PC
        }
        description "
         The pc_vmWare target provides the packages needed to run eCos binaries
            on a standard i386 PC under wmWare."
}

它指示某种目标机,因硬件配置选需要的package。

3 cdl 文件
CDL是the component definition language的缩写,每一个package都有相应的cdl文件,在其中有相关的功能选项,缺省配置等等。

4 template
template是指为某种目的build而建立的相应模板配置,比如选取一些包,配置一些选项等等。在目录 ecos-2.0/package/templates 下面有一些模板的目录。

5 ecc 文件
  ecc 是eCos Configuration的缩写,是当前任务的配置文件。

二、脚本解释
前面简单介绍了一些基本概念,下面解释一下编译脚本的意义
export PRJ_PATH=/home/andrew/share/project/redboot
export ECOS_REPOSITORY=$PRJ_PATH/ecos/packages/
export PATH=$PATH:$PRJ_PATH/gnutools/i386-elf/bin/:$PRJ_PATH/ecos-2.0/tools/bin
rm build -rf
mkdir build
cd build
ecosconfig new pc_vmWare redboot
ecosconfig import ${PRJ_PATH}/ecos/packages/hal/i386/pc/current/misc/redboot_FLOPPY.ecm
ecosconfig import ${PRJ_PATH}/nobootp.cfg
ecosconfig tree
make

前面几个export,是配置一些基本路径,包括eCos代码所在路径(ECOS_REPOSITORY),
编译工具所在路径,和配置工具(ecosconfig)所在路径。

ecosconfig new pc_vmWare redboot
这句话是通过ecosconfig建立一个新的配置文件ecos.ecc,其中两个重要的参数为target,和template。

pc_vmWare 是target的取值,指我们的目标机是一个vmWare虚拟的pc,可以在ecos.db中找到 target pc_vmWare 在其中指明了该target的硬件配置,比如串行口,网卡,根据相关硬件,可以找到相应的驱动包。

redboot 是template的取值,指我们要build一个redboot的启动文件。可以在ecos-2.0/package/templates/redboot/v2_0.ect 文件里,看到模板的内容。

这条命令后会在build目录下产生一个当前的配置文件,ecos.ecc,在其中可以看到当前的相关的配置。

之后两条 import 命令,是通过相关文件修改,ecos.ecc的配置。比如,nobootp.cfg内容:
cdl_option CYGSEM_REDBOOT_DEFAULT_NO_BOOTP {
     user_value 1
};

就是将原有的CYGSEM_REDBOOT_DEFAULT_NO_BOOTP值从0改为1,也就是取消BOOTP。

ecosconfig tree

就是根据ecos.ecc, 生成相关文件,makefile,以及文件目录等等。

最后通过make就生产了redboot.bin的文件

【上篇】
【下篇】

抱歉!评论已关闭.