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子系 ...
随机推荐
- 优秀个人免费私有云OwnCloud 8.0终于发布 - 亮眼新功能初探简介
OwnCloud是一个基于Linux的私有云开源项目,用户可以免费使用它来搭建自己的私有云来进行文件和多媒体等的分享. 本人有幸在大概一年多前因为项目需要而接触和使用到OwnCloud,但不幸的是当时 ...
- oracle 存储过程的基本语法
原文:oracle 存储过程的基本语法 1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字( 参数1 IN NUMBER, 参数2 IN NUMBER) I ...
- VMware Workstation 无法与 Windows XP \ Windows 7 \ Windows 8 进行共享文件夹。
1.这是一个小Bug,做法很简单. ----①.如果安装了VMware Tools,先卸载VMware Tools,重启虚拟机,再安装VMware Tools,重启虚拟机,就行了. ----②.如果没 ...
- 腾讯QQ音乐网页版 音频初始化模块解压混淆js源码
define("js/view/playerBar.js",function(t,e,o){ var i = t("js/lib/zepto.js"), a = ...
- 从PHP官网被攻击,到熟悉SSL(安全链路层)
近日,php官网php.net网站受到恶意攻击,攻击者至少破坏了2个服务器.PHP工作组不得不重置用户密码. PHP工作组在随后的调查发现,攻击者成功的对网站注入了恶意的JavaScript代码,这个 ...
- js获取编辑框游标的位置
代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ...
- js获取当前指定的前几天的日期(如当前时间的前七天的日期)
这里就不多说了,直接贴上代码: <html> <head> <meta http-equiv="Content-Type" content=" ...
- 【MS SQL】查看任务执行进度
原文:[MS SQL]查看任务执行进度 备份或还原数据库时,我一般是用MS SQL工具向导来进行,由于工具向导没有显示任务执行过程的状态, 如果数据库比较大执行时间较长的话,对任务啥时候执行完成比较迷 ...
- CString转换为const char*
CString str=_T("这是我的测试程序.");// 先得到要转换为字符的长度const size_t strsize=(str.GetLength()+1)*2; // ...
- Java、C#双语版HttpHelper类
Java.C#双语版HttpHelper类(解决网页抓取乱码问题) 在做一些需要抓取网页的项目时,经常性的遇到乱码问题.最省事的做法是去需要抓取的网站看看具体是什么编码,然后采用正确的编码进行解码 ...