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执行完成后立即运行。
如何判断三相电动机绕组的首尾
数码管驱动芯片+语音芯片的应用场景介绍,WT588E02B-24SS
TBOOT对任何rt-thread版本进行有限的改动
VR技术烂大街?国内VR的未来在哪里?
基于组合单元密集型FSS结构的特点及应用研究
构建eCos嵌入式系统的步骤教程
简述地物光谱仪的基本结构
DDR3内存或退出市场三星等大厂计划停产DDR3内存
PNP和NPN三极管的区别 三极管电流放大的原理
佳能开发SPAD图像传感器,实现1百万像素的数字图像分辨率
I.MXRT FreeRTOS环境下擦写外部Flash
干货 | 氮化镓GaN驱动器的PCB设计策略概要
电源滤波器有用吗?该怎么选择呢?
热处理生产线淬火技术策略的设计与通讯
晶圆制造重镇遇地震,对半导体产业影响几何?
为何达迪尔/TAKDIR扫地机器人会受消费者喜爱,究竟有何别致之处
基于NFC技术的智能引导系统设计
三星再输华为:专利无效请求被驳,22款手机禁售,解除机会渺茫
对话ADI专家:听内行人分析新能源与汽车的发展“门道”
pcb板短路原因有哪些