mypath是ecos的安装目录 mypath/ecos/package/ecos.db记录了现有的包(package)和目标板(target)描述.
一个target包含若干的package,target的描述会出现在configtool的templete的选项里。Target里同时指定了包含的package。照猫画虎的添加上自己的package和target后就可以在configtool的templete里看到。
Ecos的软件分了若干的模块,移植工作主要在他的hal层进行(包含在package/hal路径下),所谓hal(硬件抽象层)就是把和硬件相关的软件凑到一起,因为其他大部分代码使用C和C++,和硬件都是无关的,所以主要研究这一部分代码就可以进行移植,实际工作更加简单,因为ecos的HAL还分了几层,Common HAL, Architecture HAL,Variant HAL,Platform HAL,这几个层次同样可以在软件结构上找到对应关系,以三星的snds平台为例,首先在hal路径下可以看到common目录,/hal/arm/arch/目录,以及/hal/arm/snds/目录。这和上面的几层基本是对应的,当然这里这里面可以认为Variant HAL,Platform HAL合并了, 值得注意的是以上每个目录下的cdl目录下的cdl文件,打开configtool,在build->templete中选择samsung snds平台和redboot包后,可以看到出现相应的选项,其中有一个eCOSHal选项,该选项展开以后有ARMarchitecture,再展开以后还有SamsungSNDS evaluation board 选项,展开后同样有诸多选项,分别打开以上目录中的cdl文件,和这些选项对照,发现每一层的选项和每一层的CDL文件中的描述一一对应(虽然不知道CDL文件的语法,但对应关系还是很清晰)。可以说每一层之间相同的软件模块都有很大的借鉴,(一般可以直接COPY,然后根据不同之处作相应的改动即可)。对于现代的CPU,因为是ARM体系的,所以位置和arm下其他cpu模块是并列的,同时可以大量借鉴。
另一个问题是configtool中的选项如何在代码中实现,其实研究一下可以发现大部分选项对应一个宏定义,而选项的值将被用作代替这个宏,当然选项中还有对一些文件的选择,将在编译链接的时候用到。
通过配置文件配置完毕后,会被要求保存ecc文件,同时会在该目录下生成一个build目录和install目录,build目录存放最终需要编译的代码,这时再看hal目录,发现每一层只剩下和自己平台相关的文件了。
需要修改和研究的文件:
Variant HAL
Some variant HALs may add extra files for variant specific serial drivers, or for handling interrupts/exceptions if it makes sense.
build目录下存放的是编译的目标文件,不是源文件。 redboot和自己的bootloader可以并行,实际上hal_platform_setup.h中实现了平台的基本初始化,是通过PLATFORM_SETUP1这个宏实现的。
如果没有硬件板子,可以先简单做一个软件仿真,应用ADW调试工具,在option选项中选择configure----ARMulate-----configure,在其中设置必要的微处理器内核,和一些其他选项,[适应你的cpu] 就可以仿真了。
Redboot,虽然现代可能已经移植好了,但是我们的目的是学习嘛,所以我就把我针对s344b0x01移植时的相关代码和步骤说一下,让大家批评指正。
首先:改动ecos.db增加我的packages和target
package CYGPKG_HAL_ARM_HLAS {
alias { "Dongsin HLAS" hal_arm_hlas arm_hlas_hal}
directory hal/arm/hlas
script hal_arm_hlas.cdl
hardware description " The HLAS HAL package provides the support needed to un eCos on a Dongsin HLAS eval board" }
target hlas {
alias { "Dongsin HLAS" HLAS hlas hlas100}
packages { CYGPKG_HAL_ARM CYGPKG_HAL_ARM_HLAS }
enable { CYGHWR_HAL_ARM_LITTLEENDIAN}
description " The hlas target provides the packages needed to run eCos on a Dongsin HLAS eval board." }
然后,修改我的packages CYGPKG_HAL_ARM_HLAS.CDL 大部分可以参考模板
三、 定义I/O moacos 在做这部分工作时一定要有耐性,定义要按照模板进行 这块做的好会给以后的编程带来方便。
四、 编写基本的串口驱动了,
一直推荐研究这个bootloader是因为ecos的可移植性方面的工作和提供的工具是其他开发源码bootloader无法相比的,希望能总结出新平台的移植细节,从而是大家在其他平台上也可以迅速移植并使用。虽然源代码有了,有些东西还是应该分析清楚,以配合硬件组连调。
Note that these files may be mostly empty if the CPU variant can be controlled by the generic architecture macros. The definitions present are only conditionally defined - if the equivalent platform headers provide the definitions, those override the variant definitions.
File Description
include/var_arch.h Saved register frame format, various thread, register and stack related macros.
include/var_cache.h Cache related macros.
include/var_intr.h Interrupt related macros.
include/var_regs.h Extra register definitions for the CPU variant. include/variant.inc Various assembly macros used during system initialization.
src/var_intr.c Interrupt functions if necessary.
src/var_misc.c hal_variant_init function and any necessary extra functions.
src/variant.S Interrupt handler table definition.
src/<arch>_<variant>.ld Linker macros.
Platform HAL
Extras files may be added for platform specific serial drivers. Extra files for handling interrupts and exceptions will be present if it makes sense.
File Description
include/hal_diag.h Defines functions used for HAL diagnostics output. This would normally be the ROM calling interface wrappers, but may also be the low-level IO functions themselves, saving a little overhead.
include/platform.inc Platform initialization code. This includes memory controller, vectors, and monitor initialization. Depending on the architecture, other things may need defining here as well: interrupt decoding, status register initialization value, etc.
include/plf_cache.h Platform specific cache handling.
include/plf_intr.h Platform specific interrupt handling.
include/plf_io.h PCI IO definitions and macros. May also be used to override generic HAL IO macros if the platform endianness differs from that of the CPU.
include/plf_stub.h Defines stub initializer and board reset details. src/hal_diag.c May contain the low-level device drivers. But these may also reside in plf_stub.c
src/platform.S Memory controller setup macro, and if necessary interrupt springboard code.
src/plf_misc.c Platform initialization code.
src/plf_mk_defs.c Used to export definitions from C header files to assembler header files.
src/plf_stub.c Platform specific stub initialization and possibly the low-level device driver.