×
嵌入式 > 技术百科 > 详情

如何构建eCos嵌入式系统

发布时间:2021-05-20 发布时间:
|
ecos是一个优秀的嵌入式实时操作系统。ecos的体系结构是一种分层结构,硬件抽象层将操作系统与硬件隔离开,这为把ecos移植到不同的硬件平台提供了便捷的方法,抽象层就像软件与硬件之间的桥梁。主要的移植思想是,按照ecos的模块化设计,完成硬件抽象层。 引言 目前,嵌入式操作系统的种类较多,其中比较流行的有vxworks、windows ce、psos、palm 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所示。

图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 s3c4510b为核心的平台snds4110,当需要移植ecos到arm cpu s3c44b0上时,这将是一个很好的起点。 移植工作最好是从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文件完成。主要的函数如下:

点击看原图

⑧ 修改或增加平台初始化程序。平台初始化在3个文件文件中完成:src/s3c44b0_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执行完成后立即运行。ecos设备驱动程序一般可分为三个部分,如图2所示。 

ecos的所用设备驱动程序都使用设备表入口来描述。使用宏devtab_entry()可生成设备表入口。其格式为: 

设备入口中的句柄handlers包含了一组设备驱动程序接口函数,是设备函数表devio_tab的指针,devio_tab包含了一组函数的指针。设备i/o函数表通过devio_tab宏来定义,格式如下:

在ecos的初始化引导过程中,对系统中的所有设备调用其相应的init()函数(即devtab_entry宏注册的初始化函数),所有对设备的i/o操作通过handlers完成。

点击看原图

结论 经过硬件平台的移植和驱动程序的编写,就可在此基础上开发各种应用程序了,ecos具有非常优秀的可移植性;使用多任务抢占机制,具有最小的中断延迟;支持嵌入式系统所需的所有同步原语,提供包括设备驱动程序、内存管理、例外处理、标准c和数学库;提供各种开发嵌入式应用所需的工具,是开发嵌入式系统的强有力工具。 


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
MC79L12ACLP的技术参数