zoukankan      html  css  js  c++  java
  • 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。
    需要注意的是在安装过程中如果出现“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
    ");
    	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


  • 相关阅读:
    noi.openjudge——2971 抓住那头牛
    P1265 公路修建 洛谷
    P2330 [SCOI2005] 繁忙的都市 洛谷
    P1331 海战 洛谷
    P1464 Function 洛谷
    基于Manhattan最小生成树的莫队算法
    zoj3659
    poj1182
    hdu1325
    hdu3635
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3180274.html
Copyright © 2011-2022 走看看