redboot是ecos系统的bootloader,其可移植性很高(相对于U-boot来说),移植难度也不低。移植的主要工作在于硬件抽象层(HAL)的修改,硬件抽象层HAL对处理器结构和系统硬件平台进行抽象,主要包括三大模块——体系结构抽象层(Architecture HAL)、变体抽象层(Variant HAL)和平台抽象层(Platform HAL)。
体系结构抽象层---主要是指ECOS所支持的具有不同体系结构的处理器系列,如ARM系列、PowerPC系列、MIPS系列等等
变体抽象层---指的是处理器系列中某款处理器在Cache、MMU和FPU等方面所具有的特殊性。如S3C2510属于ARM系列中的ARM940T,在变体抽象层中就会具体地针对ARM940T的Cache等方面作出定义
平台抽象层---则是对当前系统硬件平台的抽象,包括了平台的启动、芯片选择与配置、定时设备、I/O寄存器访问以及中断寄存器等等
在ecos/packages/hal/arm/***/目录下是平台相关代码,平台抽象层代码是移植的重点
hal_arm_board.cdl---cdl文件使用cdl脚本语言描述该硬件设备(包或平台)的特性和常用指标。cdl文件实现系统在源码级的功能和指标配置,犹如一个项目管理高层对其仓库中组件特性的登记,只有登记后的包、组件和选项才能被操作系统配置工具识别和配置
以下是MX27的cdl文件钟的几段主要描述:
cdl_package CYGPKG_HAL_ARM_MX27ADS---这是mx27在ecos.db中所登记的包的名字,它下面包含了该板的一些基本设置和组件,如母体体系结构(parent)、包含的头文件、编译的C文件等
cdl_component CYG_HAL_STARTUP---系统启动方式,有3种选择:ram启动、rom启动、romram启动
cdl_component CYGPKG_REDBOOT_HAL_BOARD_OPTIONS ---定义内核ram启动的地址等
在ecos/packages/目录下在ecos.db是关于ECOS系统的一个数据库文件(在packages目录下),它包含了硬件包管理工具和一些在组件配置库中的包,只有在ecos.db中登记了的包,才能被ECOS的库编译工具(configtool)选中和使用
硬件平台层的一些重要文件:
vectors.S---在target.ld中描述的入口软件,定义了reset_vector、start等各种启动标号
hal_platform_setup.h —— 平台启动代码。本文件主要用ARM汇编指令编写,实现平台上电后程序的启动和执行。
plf_io.h ---IO口名称,麻烦事儿
hal_platform_ints.h 中断配置,中断在寄存器中
pkgconf/ ------- 6个存储空间配置文件
hal_diag.c redboot用这些函数和GDB通讯
hal_diag.h 串口打印相关
hal_platform_ints.h 中断配置
......
启动的大概流程:
vectors.S --> reset_vector处开始执行,调用hal_platform_ints.h定义的platform_setup宏来进行一系列的初始化工作,vectors.S里面有LED空宏,我们可以修改来实现启动状态的指示,初始化完后会调用main.c --> cyg_start这时候会显示一些信息。redboot/ecos中没有main函数,C语言入口是从cyg_start开始的
flash分区表的问题:
在redboot中flash分区表是通过fis函数族来实现的,它是建立在MTD驱动之上,引导文件系统的时候要指定文件系统镜像文件所在的BLOCK位置,一般是放在mtdblock2上,在redboot跑起来后,运行fis -list就可以显示flash分区表的信息。linux下可以自动识别redboot下的flash分区,以块设备的形式在dev目录下表现出来,这是redboot对比Uboot的其中一个很大的区别
阅读(865) | 评论(0) | 转发(0) |