ARM仿真器-foxICE 设为首页   |   加入收藏夹   |   网站地图         
  站内搜索:
 
http://www.foxice.net
最新下载_foxICE
ARM7TDMI R3内核
ARM7EJS内核
ARM946E-S内核
ARM966E-S内核
ARM9TDMI内核
ARM940T内核
ARM指令集速查卡
ARM925T内核(TI925T)

更多 >> 

 技术专栏RSS订阅

   首页>技术专栏>Redboot >如何构建eCos嵌入式系统

如何构建eCos嵌入式系统

作者: 海军工程大学 周永红,王玲玲  

eCos 是一个优秀的嵌入式实时操作系统。 eCos 的体系结构是一种分层结构,硬件抽象层将操作系统与硬件隔离开,这为把 eCos 移植到不同的硬件平台提供了便捷的方法,抽象层就像软件与硬件之间的桥梁。主要的移植思想是,按照 eCos 的模块化设计,完成硬件抽象层。

    引言

    目前,嵌入式操作系统的种类较多,其中比较流行的有 VxWorks 、 Windows CE 、 Psos 、 Palm OS 、嵌入式 Linux 等。这些嵌入式操作系统在开放性、实用性以及性能等方面各有千秋,但大多数为商用产品。除了商用产品外,还有一些免费的嵌入式操作系统, uClinux 是其中比较流行的,而eCos则是另一个选择。嵌入式可配置操作系统eCos(Embedded Configureable Operating System )的特点是可配置性、可裁减性、可移植性和实时性。它的一个主要技术特色就是功能强大的配置系统,可以在源码级实现对系统的配置和裁减。与 Linux 的配置和裁减相比,eCos的配置方法更清晰、更方便;且系统层次也比 Linux 清晰明了,移植和增加驱动模块更加容易。正是由于这些特性,eCos引起了越来越多的关注,同时也吸引越来越多的厂家使用 eCos 开发其新一代嵌入式产品。

    eCos 现在由 Red Hat 维护,可支持的处理器包括: ARM 、 StrongARM 、 XScale 、 SuperH 、 Intel X86 、 PowerPC 、 MIPS 、 AM3X 、 Motorola 68/Coldfire 、 SPARC 、 Hitachi H8/300H 和 NEC V850 等。源代码及开发工具可在 Red Hat 的网站上免费下载,网页地址是 http:/sources.redhat.com/ecos 。

    1 、 eCos 的层次结构

    eCos 采用模块化设计,由不同的功能组件构成, eCos 系统的层次结构如图 1 所示。

    这种层次结构的最底层是硬件抽象层( Hardware Abstraction Layer ),简称为 HAL ,它负责对目标系统硬件平台进行操作和控制,包括对中断和例外的处理,为上层软件提供硬件操作接口。只需提供新硬件的抽象层,就可以将整个 eCos 系统包括基于 eCos 的应用移植到新的硬件平台上。

    2 、构建 eCos 系统 

    构建 eCos 系统首先要搭建自己的硬件抽象层,然后创建驱动程序,之后就可以编制应用程序了。

    3 、硬件抽象层的移植

    硬件抽象层分为三个不同的子模块:体系结构抽象层( Architecture HAL )、变体抽象层( Variant HAL )和平台抽象层( Platform HAL )。

    体系结构抽象层。 eCos 所支持的不同处理器系列具有不同的体系结构,如 ARM 系列、 PowerPC 系列、 MIPS 系列等。体系结构抽象层对 CPU 的基本结构进行抽象和定义,此外它还包括中断的交付处理、上下文切换、 CPU 启动以及该类处理器结构的指令系统等。

    变体抽象层指的是处理器在该处理器系列中所具有的特殊性,这些特殊性包括 Cache 、 MMU 、 FPU 等。 eCos 的变体抽象层就是对这些特殊性进行抽象和封装。

    平台抽象层是对当前系统的硬件平台进行抽象,包括平台的启动、芯片选择和配置、定时设备、 I/O 寄存器访问以及中断寄存器等。

    硬件抽象层的这三个子模块之间没有明显的界线。对于不同的目标平台,这种区分具有一定的模糊性。例如, MMU 和 Cache 可能在某个平台上属于体系结构抽象层,而在另一个平台上则可能属于变体抽象层的范围;再比如,内存和中断控制器可能是一种片内设备而属于变体抽象层,也可能是片外设备而属于平台抽象层。

    eCos 的移植通过这三个子模块来完成,即平台抽象层的移植、变体抽象层的移植和体系结构抽象层的移植。对一个新的体系结构来说,其系统结构抽象层的建立相对来说比较困难。 eCos 支持大部分当前广泛使用的嵌入式 CPU ,已具有了支持各种体系结构的硬件抽象层。因此, eCos 的移植很少需要进行体系结构抽象层的编写。

    4 、平台抽象层的移植

    一般来说,进行 eCos 开发时,移植的主要工作在于平台抽象层,这是由于 eCos 已实现了绝大多数流行嵌入式 CPU 的体系结构抽象层和变体抽象层。平台抽象层主要完成的工作包括:内存的布局、平台早期初始化、中断控制器以及简单串口驱动程序等。

    构建一个新的平台系统,最简单的方法是利用eCos源码提供的具有相同体系结构和 CPU 型号的参考平台硬件抽象层,将其作为模板,复制并修改所有与新平台相关的文件。若 eCos 没有这样的平台,则可用另一种体系结构或 CPU 型号的类似硬件抽象层作为模板。比如, eCos 提供了以三星公司 ARM CPU S 3C 4510b 为核心的平台 SNDS4110 ,当需要移植 eCos 到 ARM CPU S 3C 44B0 上时,这将是一个很好的起点。

    移植工作最好是从RedBoot开始,实现的第一个目标是使RedBoot运行在新平台上。 RedBoot 是eCos自带的启动代码,它比 eCos 要简单,没有使用中断和线程机制,但包含了大部分最基本的功能。

    建立目标平台的RedBoot通常按以下步骤进行(以构建 S3C44b0 的新平台为例)。

    ① 复制 eCos 源码中选定的参考平台,根据需要对目录及文件更名。更名的主要内容有:新平台的目录名、组件定义文件( CDL )、内存布局文件( MLT )、平台初始化的源文件和头文件。

    ② 调整组件定义文件( CDL )选项。包括选项的名字、实时时钟 / 计数器、 CYGHWR_MEMORY_LAYOUT 变量、串口参数以及其他的一些选项。

    ③ 在顶层ecos.db文件中加入所需要的包,并增加对目标平台的描述。在最初,该目标平台的入口可以只包含硬件抽象层包,其他硬件支持包以后再加入。经过修改后,就可在 eCos 配置程序中选择新的平台进行配置。

    ④ 修改include/pkgconf 中的内存布局( MLT )文件。按照新的硬件平台内存布局修改 MLT 文件。 MLT 文件对应每种启动类型有三个不同后缀的文件: .h 文件以及 .ldi 文件和 mlt 文件。手工修改时只需修改 .h 文件和 .ldi 文件,并保证两个文件同步修改。修改的主要内容有 ROM 的起始地址、 ROM 的大小、 RAM 的起始地址和 RAM 的大小。

    ⑤ 修改平台的 io 宏定义。在 include/plt_io.h 文件中完成对平台的各种 IO 宏定义,包括各种 CPU 的系统配置寄存器、内存配置寄存器、串口配置寄存器、 LCD 配置寄存器、以太网配置寄存器等的 I/O 地址。

    ⑥ 修改平台的Cache代码。在 include/hal_cache.h 文件中修改有关 Cache 的宏定义。在开发初期,最好先将 Cache 关闭,等移植稳定后再打开。

    ⑦ 实现简单的串口驱动程序。串口的初始化、接收和发送在 src/hal_diag.c 文件完成。主要的函数如下:

    cyg_hal_plf_serial_init_channel() ,完成对某个串口的具体初始化工作;
    cyg_hal_plf_serial_putc() ,从串口发送一个字符;
    cyg_hal_plf_serial_getc() ,从串口接收一个字符;
    cyg_hal_plf_serial_getc_nonblock() ,以无阻塞的方式接收一个字符,即缓冲区中无数据时立即返回;
    cyg_hal_plf_serial_isr() ,串口中断服务程序;
    cyg_hal_plf_serial_init() ,调用 cyg_hal_plf_serial_init_channel() 函数初始化各串口,并向内核注册串口中断服务程序、串口的读写例程和配置例程。

    ⑧ 修改或增加平台初始化程序。平台初始化在 3 个文件文件中完成: src/s 3c 44b0_misc.c 、 include/hal_platform_setup.h 和 include/hal_platform_ints.h 。

    hal_platform_ints.h 完成系统的中断宏定义。在不同的平台中设备数量和类型不同,中断的译码方式也不一致,需要根据具体情况作出调整。

    hal_platform_setup.h 主要完成系统硬件的初步配置,这里一般要在看门狗和中断关闭后,配置系统时钟频率、 ROM 和 RAM 的初始化参数。

    s3c44b0_misc.c 文件完成目标板的进一步初始化、中断处理、延时例程和操作系统时钟设置。

    经过以上修改,底层的平台抽象层就基本完成了,这时可用 eCos 的配置工具生成 RedBoot 进行测试。

   RedBoot测试成功后,说明平台已经能正确完成初始化操作,且串口驱动也能正常工作,接着要完成中断和 Cache 等测试工作。可利用一些多线程的小程序测试,检测时钟配置是否正确,同时也检测了中断能否正常工作。

    5 、驱动程序设计

    平台抽象层完成后,接着要完成系统的设备驱动程序。 eCos 设备驱动程序的中断模块分为三个层次:中断服务程序 ISR 、中断滞后服务程序 DSR 和中断线程。 ISR 在响应中断时立即调用, DSR 由 ISR 发出调用请求后调用,而中断线程为驱动程序的客户程序。

    硬件中断在最短的时间内交付给ISR处理。硬件抽象层对硬件中断源进行译码并调用对应的中断 ISR 。 ISR可以对硬件进行简单的操作,应使ISR的处理时间尽量短。当ISR返回时,它可将自己的中断滞后服务程序DSR放入操作系统的任务调度中, DSR可以在不妨碍调度器正常工作时安全运行。大多数情况下, DSR 将在ISR执行完成后立即运行。
立即下载:
点击下载
相关文档
 
下载说明:
  1. 未经本站明确许可,任何网站不得非法盗链及抄袭本站资源!
 

首页 | 产品介绍 | 技术支持 | 下载中心 | 技术专栏 | 关于我们 | 联系我们
电话:86-755-82798083   82796301   传真:86-755-82799007    Email:sales@foxice.net   sales6@foxice.net
在线咨询:QQ:346466907   MSN:sales6@foxice.net   ini3000@msn.com

© 2006 Foxice.net 版权所有