
引言
目前ˇ嵌入式 *** 作系统的种类较多ˇ其中比较流行的有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所示。
图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所示。
图2
ECos的所用设备驱动程序都使用设备表入口来描述。使用宏DEVTAB_ENTRY()可生成设备表入口。其格式为ˇ
点击看原图
设备入口中的句柄Handlers包含了一组设备驱动程序接口函数ˇ是设备函数表DEVIO_TAB的指针ˇDEVIO_TAB包含了一组函数的指针。设备I/O函数表通过DEVIO_TAB宏来定义ˇ格式如下ˇ
在ECos的初始化引导过程中ˇ对系统中的所有设备调用其ˇ应的Init()函数ˇ即DEVTAB_ENTRY宏注册的初始化函数ˇˇ所有对设备的I/O *** 作通过Handlers完成。
它是在Windows下的编译环境,在LINUX下没用过。ARM编译环境建立说明
安装需要的文件
Ecos目录和ecos_tools目录.
其中ecos_tools目录中包括cygwin安装目录,ecosV1.3.1目录,arm-elf编译环境.
安装建议
1. 建议cygwin和ecos安装路径都单独安装在硬盘的盘符的根目录下,例如:d:\cygwin,d:\ecos
2. 安装cygwin和ecos需要大概800M左右空间.
安装cygwin
1. 进入ecos_tools目录下面的cygwin目录,运行setup.exe.
2. 点击下一步,在(图一)所示的选项中选择第三项(install from local directory)
(图一)
3. 点击下一步,在(图二)所示的窗口中填入安装路径,Default Text File Type选择DOS即可,然后点击下一步,安装的源路径默认即可.
4. 点击下一步,出现的窗口让用户选择安装哪些包,这些包主要是确定开发环境,编译工具等,如果不能确定具体需要哪些包的话,而硬盘空间足够的情况下,就选择全部安装。在出现的对话框的''All''的右边点击''Default'',直到变成''Install'',如(图三)所示,然后进行安装即可.
(图三)
安装cygwin下的ARM-elf编译环境
1. 在安装好的cygwin目录里建立tools目录,例如安装的路径为d:\cygwin,那么建立tools目录即为d:\cygwin\tools.
2. 进入ecos_tools目录下的toolchain目录,解压缩arm-elf-big-endian.zip文件压缩包,然后把解压缩的arm-elf整个目录拷贝到安装的cygwin目录下的tools目录中,形成比如d:\cygwin\tools\arm-elf.
3. 打开安装的cygwin目录ect目录下面的profile文件,找到export PATH="/usr/local/bin:/usr/bin:/bin:$PATH",然后修改为export PATH="/usr/local/bin:/usr/bin:/bin:/tools/arm-elf/bin:$PATH"即可.
安装ECOS环境
1. 运行ecos_tools目录下1.3.1目录中的eCos131.exe.根据安装提示安装ECOSV1.3.1
2. 安装完毕后,把ecos目录中所有内容拷贝到安装后的ecos目录中进行覆盖.
3. 拷贝ecos_tools目录中的tcl82.dll文件到安装的cygwin目录的bin目录中.
4. 拷贝ecos_tools目录中x文件和rpx文件到安装后的ecos目录中.
5. 运行windows程序菜单中的Red Hat eCos里面的Configuration Tool,出现如(图四)所示的配置窗口.
(图四)
6. 选择build菜单中的Repository,在如(图五)所示的d出的窗口中配置目录,点击browse按钮,选择安装的ecos目录,然后点击ok按钮.
(图五)
7. 选择tools菜单中的paths菜单,选择paths菜单中的build tools子菜单,在如(图六)所示的d出窗口中配置目录,点击browse按钮,选择安装的cygwin目录中的tools目录下面的arm-elf目录下的bin目录,然后点击Ok按钮.
(图六)
8. 选择tools菜单中的paths菜单,选择paths菜单中的user tools子菜单,在如(图七)所示的d出窗口中配置目录,点击browse按钮,选择安装的cygwin目录中bin目录,然后点击Ok按钮.
(图七)
9. 选择tools菜单中的shell子菜单,如果能d出类似dos窗口的窗口,那么说明第6,7,8步配置正确,否则请重新设置路径.
10. eCos使用“/c”、“/d”等表示硬盘“c:”和“d:”,因此必须在选择shell菜单d出窗口中执行下述命令:$ mount –f c:/ /c
$ mount –f d:/ /d
可以使用下述命令进入相应得硬盘:
$ cd /c
$ cd /d
11. 另外1.3.1版本的ecos配置工具产生的Makefile中的目录路径总是带双斜杠,如//D/eCos之类,可以用rpx这个script来校正;重新编辑rpx文件,修改安装eCos的目录,save退出。
12. 在shell中进入eCos目录./x,然后回车; ./rpx回车。注意:每次修改eCos程序进行编译之前,都要运行./rpx,否则出现//D/eCos目录带双斜杠的错误。
13. 在eCos目录下,新建一个文件夹,把boot.ecc和download.ecc文件拷到此文件夹目录下。
14. 运行Red Hat eCos,调用boot.ecc,如果此时./rpx,然后编译boot.ecc,就会出现错误,如找不到hal.h等文件,因此要先改动boot.ecc的一个选项,然后再改回,就是说让它有一个存盘的 *** 作,eCos配置工具就会自动在boot.ecc的同一个目录下生成boot_build、boot_install、boot_mlt文件夹。然后编译就不会出错误了。
15. boot_build文件夹里存放着用于对eCos进行编译时所生成的文件,包括makefile文件、目标文件和其他一些文件;boot_install存放用于编译eCos应用程序的所有文件,包括库文件libtrget.a和头文件;boot_mlt存放内存布局文件。
16. 更改应用程序的makefile文件,把PKG_INSTALL_DIR指到boot_install目录,然后在shell中make,把生成的bin文件烧到片子里就可以了。到此ok。
注意:1、应用程序有两种运行方式,写片子方式和下载方式。(1)应用程序和 *** 作系统捆绑运行,也就是把应用程序文件夹中的makefile文件修改,makefile文件中的PKG_INSTALL_DIR指到boot.ecc生成的boot_install文件夹,存盘;在shell中,进入应用程序目录,make后回车,编译生成的bin文件烧到片子里运行即可。(2)用/ecos/boot目录下的makefile文件,更改此文件中的PKG_INSTALL_DIR指到boot.ecc生成的boot_install文件夹;用make编译生成的bin文件烧到片子里运行,此时片子里没有应用程序;然后更改应用程序所在目录的makefile文件,修改此文件使PKG_INSTALL_DIR指到download_install文件夹,存盘,在shell下进入应用程序文件夹,make后回车,把生成的bin文件拷到ecos目录下,通过fftp.exe工具下载应用程序到板子上。
2、用make成功编译一次后,就会生成.o等过程文件,当下次再make时,就会出错,因此需要make clean,清除编译过程文件。
3、用fftp.exe工具下载时,一定去掉防火墙。
Redboot被设计用于嵌入式调试和启动环境,它是一个基于eCos的应用程序,使用eCos的硬件抽象层(HAL)作为它的基础。它一个基本的功能是作为bootloader,但可用于任何嵌入式系统或任何嵌入式实时 *** 作系统中。也可用于产品开发周期中的调试支持或在发布的产品中提供flash或网络启动。特性有:
启动脚本支持;
管理和控制的命令行支持;
通过串口或以太网口的访问;
GDB支持;
flash映像系统支持;
X/Y调制解调器的支持;
支持使用BOOTP或静态IP地址配置的网络启动;
移植redboot到stm32开发板
1.,搭建好ecos开发环境
2,打开ecos图形配置工具configtool,如下图所示。
下图中,左边窗口为ecos的配置项窗口,右边窗口从上到下分别为:冲突提示窗口、配置项属性窗口、配置项说明窗口。
3,设定ecos代码仓库(Repository)位置
获取ecos最新代码,
在ecos图形配置工具configtool界面中,点击Build->Repository,如下图所示。
配置好ecos代码仓库位置后,configtool会重新载入内容。
4,选择模板(Template)和目标(Target)及软件包(Package)
在ecos图形配置工具configtool界面中,点击Build->Templates,在Templates界面中,先选择目标板,即在Hardware中选择“ST STM3210E EVAL board”,然后选择模板即在Package中选择“redboot”,最后点击OK。如下左图所示。
点击OK后,可d出一个冲突提示按钮,如下右图所示。不过不要紧,点击Continue按钮即可,configtool会帮我们自动解决这些冲突的。
5. 导入redboot-ROM的最小配置
在ecos图形配置工具configtool界面中,点击File->Impor,如下左图所示,然后会出现如下右图所示的界面。
在上面右图界面中,去设定的ecos软件仓库的如下路径找到redboot-ROM的最小配置文件:
你的ecos软件仓库路径/ecos/packages/hal/cortexm/stm32/stm3210e_eval/current/misc
在该路径下有一个名为:redboot_ROM.ecm的文件,这个就是redboot-ROM的最小配置文件。ecos是一个可配置系统,配置后会产生一个后缀为.ecc的文件。而.ecm文件则是ecos的最小配置文件,与.ecc文件比较起来,.ecm文件去掉了.ecc文件中的注释,所以文件大小非常小。
导入后,会提示有冲突,如上述方法一样,点击continue让ecos的配置工具自动解决冲突。然后点击OK按钮,完成redboot_ROM最小配置文件的导入。
6.,设置串口波特率并保存配置
经上述步骤后,接下来我们确定下redboot的启动方式并设置debug串口的波特率。
在ecos图形配置工具configtool界面的配置项窗口(左边的主窗口)中,依次找到:
eCos HAL—>Cortex-M Architecture—>Cortex-M3/-M4 STM32 Variant—>ST STM3210E EVAL Development Board配置项,如下图所示。
首先确定redboot的启动类型(上右图中的Startup type配置项),根据我们导入的最小配置文件,默认情况下是ROM,所以不需要修改,这里我们需要修改下串口波特率(上右图中的Console serial port baud rate配置项),修改为115200。
至此,我们完成了redboot的配置。配置完成后,在ecos图形配置工具configtool菜单栏中点击保存按钮,选择好路径,并拟定好配置文件的名称,我取名为redboot.ecc。
保存后,会在保存路径下产生两个文件夹,其中,xxx_build用于存放编译的目标文件;xxx_install存放最终产生的目标文件和库文件等(xxx表示你保存时取得配置文件名称),
7,编译
首先,确定你的编译器的位置。在ecos图形配置工具configtool界面中
设定编译器,在ecos图形配置工具configtool界面中,点击Build->Library或者直接按F7,开始编译。在configtool的底部窗口,可以看到编译进展,最后看到finish提示时,表示编译完成,如下图所示。
这时会在redboot_install文件夹下的bin目录下有目标文件
8.,烧写redboot.bin到stm32 CPU内部flash
接好J-Link,然后给板子上电,打开J-Link的J-flash ARM软件。
然后点击File->Open data file…,选择产生的redboot.bin文件,会提示你输入开始烧写地址。默认起始地址是0,由于STM32 CPU内部flash起始地址是0x08000000,因此,这里我们输入这个地址,设定后,点击OK按钮。如下图所示。
点击Target->Connect,连接J-Link,然后点击Target->Auto或者直接按F7开始烧写redboot.bin。
9. 启动redboot
烧写好redboot.bin后,就可以启动redboot了
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)