OpenRisc-34-ORPSoC跑eCos实验

引言

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。

官网地址为:http://www.tcl.tk/

需要注意的是在安装过程中如果出现“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


7>eCos & eCos pro reference manual

http://www.ecoscentric.com/ecospro/doc/html/ref/



  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值