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\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实验的更多相关文章
- HLS:跑马灯实验
跑马灯实验的第一部分记录: 1. vivado 2018.2的HLS在跑C/RTL co-simulation的时候,一直报错,不论是用modelsim 还是vivado自带的similator.使用 ...
- S3C2410 实验三——跑马灯实验
http://www.evernote.com/shard/s307/sh/f2a748e7-34c4-4ce6-acac-82a756cc9e82/ad5813188d655e504857970db ...
- STM32开发指南-跑马灯实验
简单对I/O口的控制,主要通过对寄存器的读写控制.主要通过I/O的寄存器来控制:1. 控制I/O的方向2. 控制I/O的输出电平或上下来电阻3. 存储I/O口当前的输入状态(高低电平) 对使用LED灯 ...
- STM32F407 跑马灯实验
1.库函数版本调用的函数有哪些?对应的源文件/头文件是哪个? 库函数 源文件 头文件 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE) stm3 ...
- 第34章 IWDG—独立看门狗—零死角玩转STM32-F429系列
第34章 IWDG—独立看门狗 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...
- STM32-跑马灯实验
实验环境: STM32开发板 Keil uVision4 FlyMcu.exe 一. 建立文件夹 1.建立跟文件夹"BASE"(名称任意),再在其下建立四个子文件夹 2. 在&qu ...
- 【STM32H7教程】第18章 STM32H7的GPIO应用之跑马灯
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第18章 STM32H7的GPIO应用之跑马灯 本 ...
- GPIO原理与配置(跑马灯,蜂鸣器,按键)
一.STM32 GPIO固件库函数配置方法 1. 根据需要在项目中删掉一些不用的固件库文件,保留有用的固件库文件 2. 在stm32f10x_conf.h中注释掉这些不用的头文件 3. STM32的I ...
- OpenRisc-32-ORPSoC烧写外部spi flash
引言 经过前面的分析和介绍,我们对ORPSoC的启动过程(http://blog.csdn.net/rill_zhen/article/details/8855743)和 ORpSoC的debug子系 ...
随机推荐
- 国内ng学习网站
Ngnice-国内ng学习网站2015-01-25 21:30 by 破狼, 534 阅读, 3 评论,收藏, 编辑 今天给angular新手介绍一个国内开源的ng学习网站http://www.ngn ...
- 使用Dropbox+Justwriting+Markdown建立个人博客
使用Dropbox+Justwriting+Markdown建立个人博客,让您真正体会到什么是"简化". 您的博客所有日志存储在您的PC上.即使有一天你的server主机挂了,你的 ...
- 快速构建Windows 8风格应用19-基础控件II
原文:快速构建Windows 8风格应用19-基础控件II 本篇博文接着上篇博文<快速构建Windows 8风格应用18-基础控件I>介绍开发Windows 8风格应用中常用控件. Sli ...
- C#6.0 中的那些新特性
C#6.0 中的那些新特性 前言 VS2015在自己机器上确实是装好了,费了老劲了,想来体验一下跨平台的快感,结果被微软狠狠的来了一棒子了,装好了还是没什么用,应该还需要装Xarmain插件,配置一些 ...
- javascript 学习总结(二)Array数组
1.数组常用方法 var colors = ["red", "blue", "green"]; //creates an array wit ...
- web.xml在listener作用与用途
一.WebContextLoaderListener 监听类 它能捕捉到server的启动和停止,在启动和停止触发里面的方法做对应的操作! 它必须在web.xml 中配置才干使用,是配置监听类的 二. ...
- Android项目---ActivityGroup的使用
ActivityGroup在一年前已经被说明不用了,但是腾讯QQ,新浪微博上也不乏ActivityGroup的身影.所以,即使是过时的东西,也有学习的必要,当然项目中也是可以添加的.在网上找了一个博客 ...
- Ubuntu下开发环境搭建
安装基础开发包,主要gcc,g++等 sudo apt-get install build-essential 未完待续
- grasp设计模式笔记回顾
根据讲师所讲做了一下笔记以便自己能方便学习: ------------------------------------------grasp设计模式: grasp(general responsibi ...
- java 生成easyui 所需要的森林
在项目中,可能会遇到机构树这种格式,但是数据库存储的数据 不能维护这样子的树,所以需要中间转换来完成,zTree可以支持pid,id,name的格式,但是easyui貌似不行,这里就给出刚刚码好的代码 ...