引言

ORPSoC目前支持好几种OS,除了前面一直介绍的linux,还支持eCos,eCos是RTOS,如果你的系统对时间的要求比较高,那eCos会是一个不错的选择。
本小节就简单介绍一下,在ORPSoC上如何运行eCos。

1,关于eCos

eCos是针对于嵌入式系统而开发的开源、实时操作系统,eCos是模块化的,你可以根据自己的需要来增加或裁减相应的模块,使更合适自己。就像linux一样,但是这里需要声明的就是,eCos跟linux一点关系都没有。

此外,eCos本质上是一个静态链接库,而不是像linux那样,是以一个平台的形式在运行。对于eCos,你写的应用程序,其实和eCos本身在逻辑上是平等的。eCos的底层模块是HAL(Hardware Abstraction Layer),所以,如果想让eCos支持某个新的architecture,只要修改HAL层的代码即可。

click  http://www.ecos.sourceware.org/  for more information。

2,安装eCos

想让eCos在ORPSoC上运行,需要以下几个步骤:

1>资源准备与安装

1》安装tcl-dev,tk-dev软件包

eCos的编译需要tcl-dev和tk-dev两个软件包支持,所以在编译安装eCos之前,需要先安装这两个包。

有两种安装方式,用apt-get安装,或者自己下载软件包,自己手动安装


a,用apt-get安装:在ubuntu下执行:sudo apt-get install tcl-dev tk-dev


b,自己手动安装:首先到官网下载最新的软件包,解压,./configure,make,make install。

需要注意的是在安装过程中如果出现“permission deny”,在命令前加‘sudo’即可。

2》安装configtool

linux配置时大家都知道执行make menuconfig命令,此外linux还有一个xconfig的图形化的配置工具。 eCos配置时也需要一个类似的工具,就是configtool。所以在安装eCos之前还要安装configtool这个工具。


a,configtool的下载地址:http://www.ecoscentric.com/snapshots/configtool-100305.bz2


b,下载下来后解压:bunzip2 configtool-100305.bz2,生成一个文件名为configtool-100305的文件


c,修改文件的权限:chmod u+x configtool-100305


d,修改文件名:mv configtool-100305 configtool

3》下载安装eCos

前面说了,eCos只是一个库,所以,按照库的安装方式安装eCos即可。


a,用svn下载eCos for OpenRISC。svn的check out path为:http://opencores.org/ocsvn/openrisc/openrisc/trunk/rtos/ecos-3.0


b,切换到ecos的下载目录内,我的是:cd /home/openrisc/share/eCos


c,配置:./host/configure。eCos的默认安装路径是/usr/local/,如果想让eCos安装到其他目录可通过命令:./host/configure --prefix=/desired_path 来修改。


d,编译:make;


e,安装:makeinstall

4》修改环境变量

ecosconfig工具和configtool工具都会用到一个环境变量ECOS_REPOSITORY,所以在运行eCos之前,需要先设置一个这个环境变量。


a,变量定义:ECOS_REPOSITORY=`pwd`/packages。注意这个命令中的pwd两边的符号是键盘左上角的“`”,不是单引号“'”。


b,建立当前SHELL局部变量:export ECOS_REPOSITORY。注意,这个变量只对当前你打开的终端有效,如果你现在想去趟厕所,把当前的终端关掉了,对不起,请回来之后,重新做一下上面两个操作。

2>配置eCos

在当开始,我们就说了,eCos支持很多不同的architecture,咱们现在想让eCos在OpenRISC上运行,所以需要将eCos针对OpenRISC配置一下。为了操作清晰,我们先建一个新的目录。

1》配置准备

a,创建新目录:mkdir ecos-work,然后cd ecos-work

2》配置一

b,配置eCos到ORPSoC:ecosconfig new orpsoc

3》配置二

c,上面只是针对ORPSoC的默认配置,如果你有什么特殊要求,可以通过configtool ecos.ecc 命令进行设置。这个命令的执行效果如下图:

4》配置检查

d,定制完成后,保存退出,再检查一下刚才的配置有没有问题:ecosconfig check

5》配置三

e,如果你对自己想要定制的模块的名称记得很清楚,又不想使用图形化的界面,

可以通过ecosconfig add model_name命令来添加对应的模块。

注意在添加某个模块时,如果提示有模块依赖,必须把所有依赖的模块全部添加进去。

3,测试验证eCos

完成上面的工作后,我们就可以编写应用程序来测试eCos的运行了。

1>将测试用例和eCos一起重新编译一次

a,生成相关目录:ecosconfig tree


b,编译eCos:make


c,编译测试支持程序:make tests

2>编写测试程序,以helloworld为例。

a,编写helloworld.c和Makefile代码如下:

helloworld.c:

#include <stdio.h>
int main(void)
{
printf("eCos Rill Hello World\n");
return 0;
}

Makefile:

# This variable should point to the directory where you
# installed your eCos build.
ECOS_INSTALL := /home/openrisc/share/eCos/ecos-work/install/ # As part of the build process, eCos automatically creates
# a file with compiler flags. Those flags are computed based
# on the ecc configuration file. It is smart to use them when
# compiling your application.
include $(ECOS_INSTALL)/include/pkgconf/ecos.mak # Unfortunately, some flags are C++ flags and some are C. We
# need to separate them. The file rules.mak shipped with the eCos
# repository contains the rules to do it. So we need to include
# this file in the end of the makefile and use more generic
# names. We also add the paths to the installation directory.
CFLAGS := $(ECOS_GLOBAL_CFLAGS) -I $(ECOS_INSTALL)/include
LDFLAGS := $(ECOS_GLOBAL_LDFLAGS) -L $(ECOS_INSTALL)/lib -T $(ECOS_INSTALL)/lib/target.ld # Rules to build the application
all: hello_world hello_world: hello_world.c
$(ECOS_COMMAND_PREFIX)gcc $(ACTUAL_CFLAGS) $(LDFLAGS) $< -o $@ # Now include the file with rules. This file must be included
# in the end, otherwise it interferes with the makefile target.
#include $(ECOS_REPOSITORY)/pkgconf/rules.mak
include /home/openrisc/share/eCos/packages/pkgconf/rules.mak

b,编译:make,生成helloworld可执行程序。

3>将测试程序下载到ORPSoC的FPGA板子上,这一步可以参考之前的关于linux的操作。

a,打开一个终端:(Ctrl+Shift+t)


b,打开代理:/opt/or_debug_proxy/bin/or_debug_proxy -r 55555


c,再开一个终端,打开串口:picocom --b 115200 --p n --d 8 --f xon /dev/ttyUSB2


d,再开一个终端,运行gdb,将上面生成的helloworld文件下载到板子上。or32-elf-gdb,target remote:55555,file helloworld,load,spr npc 0x100,c

4,验证结果

经过上面的操作,此时在打开串口的那个终端,就可以看到执行结果。如下图:

需要注意的是,在验证eCos的运行时,我们并没有像运行linux下的helloworld程序那样,先将linux的镜像vmlinx下载到板子上,然后将板子挂上虚拟机的NFS服务器,再到板子上执行./helloworld的过程。原因就是,eCos是一个静态链接库,我们在编译helloworld.c时,已经将程序中所有相关的库静态的加了进来。这正是eCos和linux的最大的不同之处。

5,run an eCos test case

上面的对eCos的测试case是自己动手编写的,其实eCos提供了很多test case,我们可以直接使用,如何run an eCos test case呢?

1>配置eCos

将想要使用的测试用例添加进来。操作方法和上面介绍的相同。

2>编译生成测试用例:make tests。在ecos-work目录下。

3>运行测试用例

还是之前的操作步骤,打开代理,打开串口,gdb下载,运行。

4>上面的几个步骤除了命令行形式以外,还可以用图形化的界面来操作,就是对configtool工具的使用了,请参考对应的使用手册即可。

5>执行make tests命令后生成的测试程序都在eCos/ecos-work/install/tests目录下。

6,小结

本小节,我们在ORPSoC的平台上运行了一下基于eCos的程序,如果想测试eCos为ORPSoC设计的其它模块,可以先将相关模块通过ecosconfig add命令加到eCos里面,在编写对应的测试程序即可。

7,参考文献

1>eCos for orpsoc:

http://opencores.org/or1k/ECos

2>SD controller driver for OpenRISC eCos
http://antmicro.se/Blog/2012/05/sd-controller-driver-for-openrisc-ecos/

3>eCos官网
http://www.ecos.sourceware.org/

4>编写ipcore 的linux driver,然后run helloworld
http://blog.csdn.net/rill_zhen/article/details/8700937

5>ORSoC跑linux实验
http://blog.csdn.net/rill_zhen/article/details/8535317

6>Running an eCos Test Case

http://ecos.sourceware.org/docs-2.0/user-guide/running-an-ecos-test-case.html


OpenRisc-34-ORPSoC跑eCos实验的更多相关文章

  1. HLS:跑马灯实验

    跑马灯实验的第一部分记录: 1. vivado 2018.2的HLS在跑C/RTL co-simulation的时候,一直报错,不论是用modelsim 还是vivado自带的similator.使用 ...

  2. S3C2410 实验三——跑马灯实验

    http://www.evernote.com/shard/s307/sh/f2a748e7-34c4-4ce6-acac-82a756cc9e82/ad5813188d655e504857970db ...

  3. STM32开发指南-跑马灯实验

    简单对I/O口的控制,主要通过对寄存器的读写控制.主要通过I/O的寄存器来控制:1. 控制I/O的方向2. 控制I/O的输出电平或上下来电阻3. 存储I/O口当前的输入状态(高低电平) 对使用LED灯 ...

  4. STM32F407 跑马灯实验

    1.库函数版本调用的函数有哪些?对应的源文件/头文件是哪个? 库函数 源文件 头文件 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE) stm3 ...

  5. 第34章 IWDG—独立看门狗—零死角玩转STM32-F429系列

    第34章     IWDG—独立看门狗 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...

  6. STM32-跑马灯实验

    实验环境: STM32开发板 Keil uVision4 FlyMcu.exe 一. 建立文件夹 1.建立跟文件夹"BASE"(名称任意),再在其下建立四个子文件夹 2. 在&qu ...

  7. 【STM32H7教程】第18章 STM32H7的GPIO应用之跑马灯

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第18章       STM32H7的GPIO应用之跑马灯 本 ...

  8. GPIO原理与配置(跑马灯,蜂鸣器,按键)

    一.STM32 GPIO固件库函数配置方法 1. 根据需要在项目中删掉一些不用的固件库文件,保留有用的固件库文件 2. 在stm32f10x_conf.h中注释掉这些不用的头文件 3. STM32的I ...

  9. OpenRisc-32-ORPSoC烧写外部spi flash

    引言 经过前面的分析和介绍,我们对ORPSoC的启动过程(http://blog.csdn.net/rill_zhen/article/details/8855743)和 ORpSoC的debug子系 ...

随机推荐

  1. 国内ng学习网站

    Ngnice-国内ng学习网站2015-01-25 21:30 by 破狼, 534 阅读, 3 评论,收藏, 编辑 今天给angular新手介绍一个国内开源的ng学习网站http://www.ngn ...

  2. 使用Dropbox+Justwriting+Markdown建立个人博客

    使用Dropbox+Justwriting+Markdown建立个人博客,让您真正体会到什么是"简化". 您的博客所有日志存储在您的PC上.即使有一天你的server主机挂了,你的 ...

  3. 快速构建Windows 8风格应用19-基础控件II

    原文:快速构建Windows 8风格应用19-基础控件II 本篇博文接着上篇博文<快速构建Windows 8风格应用18-基础控件I>介绍开发Windows 8风格应用中常用控件. Sli ...

  4. C#6.0 中的那些新特性

    C#6.0 中的那些新特性 前言 VS2015在自己机器上确实是装好了,费了老劲了,想来体验一下跨平台的快感,结果被微软狠狠的来了一棒子了,装好了还是没什么用,应该还需要装Xarmain插件,配置一些 ...

  5. javascript 学习总结(二)Array数组

    1.数组常用方法 var colors = ["red", "blue", "green"]; //creates an array wit ...

  6. web.xml在listener作用与用途

    一.WebContextLoaderListener 监听类 它能捕捉到server的启动和停止,在启动和停止触发里面的方法做对应的操作! 它必须在web.xml 中配置才干使用,是配置监听类的 二. ...

  7. Android项目---ActivityGroup的使用

    ActivityGroup在一年前已经被说明不用了,但是腾讯QQ,新浪微博上也不乏ActivityGroup的身影.所以,即使是过时的东西,也有学习的必要,当然项目中也是可以添加的.在网上找了一个博客 ...

  8. Ubuntu下开发环境搭建

    安装基础开发包,主要gcc,g++等 sudo apt-get install build-essential 未完待续

  9. grasp设计模式笔记回顾

    根据讲师所讲做了一下笔记以便自己能方便学习: ------------------------------------------grasp设计模式: grasp(general responsibi ...

  10. java 生成easyui 所需要的森林

    在项目中,可能会遇到机构树这种格式,但是数据库存储的数据 不能维护这样子的树,所以需要中间转换来完成,zTree可以支持pid,id,name的格式,但是easyui貌似不行,这里就给出刚刚码好的代码 ...